canvas绘制气泡

2023-11-16

思路:使用Math.random()函数绘制是个不同位置,大小,颜色的圆形,然后设置定时器,前一个状态用一个与画布相同颜色的背景图片进行覆盖,改变圆形的位置,每次改变都是在这张空白的背景图片上面重新进行重新绘制的过程

源码:

<!doctype html>
<html>
<head>
<title>test</title>
<meta charset="UTF-8">
</head>
<body>
<canvas id="canvas" Style="border:solid black thin" width="600px" height="500px"></canvas>
<script>
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
const WIDTH = canvas.width;
const HEIGHT = canvas.height;
var img = new Image();
img.src = "white.png";
var rangeX=[];//用来存储生成的十组x坐标//这里的气泡属性用一个对象来进行封装,再将对象存储在数组中更恰当
var rangeY=[];//用来存储生成的十组y坐标
var rangeR=[];//用来存储生成的十足气泡的半径
var red=[];//用来存储红色的数值
var green=[];//用来存储绿色的数值
var blue=[];//用来存储蓝色的数值
for( var i=0;i<20;i++){//事先生成十组气泡的x坐标和半径
var r = Math.random() * 50;
var x = WIDTH * Math.random();
if (x < r) {
x = r;
}
if (x > WIDTH - r) {
x = WIDTH - r;
}
var y = WIDTH * Math.random();
if (y < r) {
y = r;
}
if (y > WIDTH - r) {
y = WIDTH - r;
}
rangeX[i]=x;
rangeR[i]=r;
rangeY[i]=y;
red[i]=Math.random()*255;
green[i]=Math.random()*255;
blue[i]=Math.random()*255;
}
var algha=0.3;
var tag=1;//设一个标记,标记气泡是在往下走还是往上走,往下是1,往上是0
var setinterval = setInterval(function () {
context.beginPath();
context.drawImage(img, 0, 0);
for (var i = 0; i < 20; i++) {
var randomX=Math.random()*3;
var randomY=Math.random()*3;
if(tag===1){
if (rangeX[i]+rangeR[i] >= WIDTH && rangeY[i]+rangeR[i] >= HEIGHT) {
tag=0;
}
context.beginPath();
rangeX[i]=rangeX[i]+randomX;
rangeY[i]=rangeY[i]+randomY;
context.arc(rangeX[i], rangeY[i], rangeR[i], 0, Math.PI * 2, false);
context.fillStyle = "rgba("+red[i]+","+green[i]+","+blue[i]+","+algha+")";
context.fill();
} else{
if (rangeX[i]-rangeR[i] <=0 && rangeY[i]-rangeR[i] <=0) {
tag=1;
}
context.beginPath();
rangeX[i]=rangeX[i]-randomX;
rangeY[i]=rangeY[i]-randomY;
context.arc(rangeX[i], rangeY[i], rangeR[i], 0, Math.PI * 2, false);
context.fillStyle = "rgba("+red[i]+","+green[i]+","+blue[i]+","+algha+")";
context.fill();
}


}
context.closePath();
}, 100);


</script>
</body>
</html>
效果图:

缺陷:

气泡移动的路径算法处理的不是很恰当

 

 

转载于:https://www.cnblogs.com/MrZWJ/p/10049111.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

canvas绘制气泡 的相关文章

  • mysql基础--存储过程

    文章目录 MySQL存储过程 1 创建存储过程 2 调用存储过程 3 变量定义 3 1 局部变量 3 2 用户变量 3 3 系统变量 3 3 1 系统变量 全局变量 3 3 2 系统变量 会话变量 4 存储过程传参 4 1 in 4 2 o
  • Unity进阶--物品,背包,角色管理器

    文章目录 物品管理器 背包管理器 角色管理器 物品管理器 物品数据 Item json json部分 Resources Data Item id 1 name 新手剑 des 这是一把宝剑 price 200 icon attack 10
  • C语言:通过函数指针来完成两个数的加减乘除(函数指针当做参数使用)

    main c Function pointer Created by mac on 15 8 2 Copyright c 2015年 All rights reserved 要求 将函数指针做参数来求两个整数的和 差 积 商 知识点 函数指
  • 【深度学习与计算机视觉】10、深度学习框架Tensorflow

    Tensorflow
  • python做的多激光雷达外参标定程序(初版本 完整版见专栏)

    查阅了一番资料和现有的代码后发现 现在的多个激光雷达之间的标定程序都是ROS框架下面的 并且都是C 代码 需要安装的依赖也比较复杂 于是自己写了一个python版本的标定程序 依赖非常简单 Windows系统也可以运行 并且代码简单 扩展性
  • 网络安全—DDOS和CC攻击的区别

    DDOS和CC攻击的区别 1 攻击简介 DDOS 分布式拒绝服务攻击 通过向目标发送大量数据包 耗尽其带宽 来使目标无法可用 CC攻击 DDOS的一种 也可以理解为应用层DDOS攻击 利用大量代理服务器对目标计算机发起大量连接 导致目标服务
  • 华中师范大学2018年874

    lt 对数组A的N个整数从小到大进行连续编号 输出各个元素的编号 例如对数组 A 5 3 4 7 3 5 6 则输出为 3 1 2 5 1 3 4 include
  • C++ 模板的显示具体化

    C 没有办法限制类型参数的范围 我们可以使用任意一种类型来实例化模板 但是模板中的语句 函数体或者类体 不一定就能适应所有的类型 可能会有个别的类型没有意义 或者会导致语法错误 例如有下面的函数模板 它用来获取两个变量中较大的一个 temp
  • maven的5种打包方式,终有一款适合你(一)

    话不多说 上主题 1 1 概述 在讲打包方式之前 首先来说最近踩到的坑 在idea新建的maven项目 在pom文件中会自动生成一段插件的管理器 我使用maven打包插件maven assembly plugin 将其配置添加到
  • Jetson-nano:制作TF卡启动

    旧Nano可以直接导入镜像至TF卡 然后插入卡槽即可启动系统 但目前旧的英伟达已经停止生产底板 现在市面上都是带emmc的核心板 底板是由其他厂商进行扩容自行生产的 因为官方自带的emmc只有16G 如果做扩展使用 就要使用到扩容的TF卡
  • 零基础必知8个测试工具

    1 Fiddler 网络抓包工具 Fiddler在测试中一般用于篡改接口请求或接口返回数据以测试前后端业务场景或对异常功能的兼容 它能监控进出设备的http协议请求 并且支持重新编辑请求与返回 从而测试前端页面对不同结果的反应 官网下载地址
  • map遍历的4种方式

    map遍历的方式有4种 1 使用for循环遍历map 2 使用迭代器遍历map 3 使用keySet迭代遍历map 4 使用entrySet遍历map 创建一个Map集合 Map
  • 使用Java8的Stream进行多字段排序以及剔除非空字段排序

    使用 Stream的sort 方法 并结合 Comparator 类 进行排序 主要解决以下两个问题 一 当某个字段为空时 怎么进行排序 使用 Comparator nullsFirst 或者 Comparator nullsLast 进行
  • 出现"/var/lib/mysql/mysql.sock“不存在的解决方法

    出现 var lib mysql mysql sock 不存在的解决方法 SQLSTATE HY000 2002 Can t connect to local MySQL server through socket var lib mysq
  • gRPC运行过程与流量控制机制

    文章目录 gRPC运行过程与流量控制 gRPC中的流量控制 讲解思路 BDP采样流量控制 结构分析 过程分析 Connection Level 流量控制 结构分析 过程分析 Stream level流量控制 结构分析 过程分析 总结 参考
  • 入门必看~~~~~群智能算法之鲸鱼优化算法(WOA)

    前言 鲸鱼优化算法 WOA 也是一种元启发式优化算法 一种新的模拟座头鲸狩猎行为的元启发式优化算法 鲸鱼优化算法 WOA 目前的工作与其他群优化算法相比的主要区别在于 采用随机或最佳搜索代理来模拟捕猎行为 并使用螺旋来模拟座头鲸的泡泡网攻击
  • A*算法 解决(有环图)第k短路径长度(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • 11g降到10g方法

    Oracle11g数据库导入Oracle10g数据库 EXPDP方法 EXPDP要注意的是 导出的文件是在服务器端的 DATA PUMP DIR目录里 11g备份 导入10g的时候会抛错 直接阻止导入 一 在11g服务器上 使用expdp命
  • 【计算机网络】网络故障排查的基本思路

    网络故障排查的基本思路 1 检查物理链路是否有问题 2 查看本机IP地址 DNS 路由的设置是否有问题 3 测试网关或路由器的通畅情况 先测试网关再测试路由器 一级一级的测试 4 测试ping公网ip的通畅情况 平时多记几个外部IP 5 测
  • 随机颜色生成

    脚本挂在游戏物体上 并且物体要有材质 using UnityEngine using System Collections public class RandomColor MonoBehaviour Use this for initia

随机推荐

  • python二维数组切片举例

    python二维数组切片举例 案例数据 data 为下面的二维数组 1 2 3 4 5 6 7 8 9 说明 逗号 分隔各个维度 表示各个维度内的切片 只有 表示取这个维度的全部值 若没有逗号 则默认是对行进行切片 类似于二维数组 data
  • 力扣:乘积最大子数组

    给你一个整数数组 nums 请你找出数组中乘积最大的非空连续子数组 该子数组中至少包含一个数字 并返回该子数组所对应的乘积 测试用例的答案是一个 32 位 整数 class Solution public int maxProduct in
  • GB28181控制、传输流程和协议接口之注册

    注册和注销基本要求 SIP客户端 网关 SIP设备 联网系统等 SIP代理 SIP UA 使用IETFRFC3261中定义的方法 15 GB T28181 2016Register进行注册和注销 注册和注销时应进行认证 认证方式应支持数字摘
  • CSS怎么将DIV中的a标签改颜色

    标签默认文字是蓝色 点过后是文字是紫色 想改变标签文字颜色设置方法如下 a color black 设置默认颜色 a link color blue 未访问颜色 a visited color gray 已访问颜色 a hover colo
  • 2023华为od机试 Java【最长公共后缀】

    题目 我们现在要实现一个功能找到字符串数组 中的最长公共后缀如果不存在公共后缀 abc bbc c 输出描述 c 示例1 输入 abc bbc c 输出 c 说明 返回公共后缀 c 示例2 输入 aa bb cc 输出 Zero 说明 不存
  • 计算机软件工程毕设推荐 40个高质量信息管理专业毕设项目分享【源码+论文】(六)

    文章目录 前言 题目1 基于SSM的在线教学视频点播系统 br 题目2 基于SSM的考研信息查询系统 br 题目3 基于SSM与垃圾分类的信息管理系统 br 题目4 基于SSM的留学生交流平台系统 br 题目5 基于SSM的企业销售培训系统
  • Java Script 日期类的定义和常用方法的使用

    一 定义日期对象 1 说明 1 与日期相关的运算被封装在Date类中 使用该类的方法和属性可以获取客户端操作系统的日期和时间值 2 要调用Date类的方法 注 Date类没有自己的属性 首先必须使用构造器创建一个Dete类的实例 2 定义方
  • SOLIDWORKS螺纹显示处理方法

    在SOLIDWORKS中 使用螺纹孔向导生成螺纹孔非常方便 如下图 生成后的螺纹孔 在旋转一定角度后 会在遮挡的面上有一个虚线圆 当螺纹孔较多时 会使得界面比较凌乱 如何隐藏这些螺纹线呢 在零件的设计树中 在 注解 上右键 选择 细节 将
  • Python学习-----模块1.0(模块的简介、定义与使用)

    目录 前言 1 什么是模块 2 模块的分类 1 内置模块 2 第三方模块 3 自定义模块 3 模块的使用 4 自定义模块 5 模块和执行文件的判断 前言 今天就开始讲Python中的模块篇了 模块是Python的重要组成部分 Python之
  • 深入了解Unity的Physics类:一份详细的技术指南(七)(上篇)

    前言 Unity的Physics类是Unity物理系统的核心 提供了一套用于处理和控制物理模拟的API 这个类提供了用于控制物理系统的全局属性和方法 以及检测和施加力到游戏对象 处理碰撞和触发器事件等 为了让开发者都能更好理解这个Physi
  • Android USBCamera,UVCCamera开发通用库,我试用了普通的USB摄像头没问题

    转自 https blog csdn net AndrExpert article details 78324181 Android直播开发之旅 10 AndroidUSBCamera UVCCamera开发通用库 AndroidUSBCa
  • 关于使用向日葵等远程软件,关闭主机显示器后远程画面缩小的解决办法

    方法一 修改分辨率 直接在桌面上 右键 显示设置 gt gt gt 显示器分辨率 gt gt gt 改成更大的分辨率即可 当然这个方法的前提是 修改分辨率的选项是可选的而不是灰色的 并且你的鼠标可以下拉并点击到修改分辨率的选择框 方法二 修
  • 去伪存真:因果约束下的图神经网络泛化

    写在篇首 图神经网络 GNN 是在各种图数据应用上强有力的深度学习算法 其基本学习范式可以归纳为 在训练节点或图上训练图神经网络参数 然后利用训练好的图神经网络预测节点或者图的标签 保证这种学习范式有效的一个基本假设是IID假设 即训练数据
  • Linux 简介 & 启动过程

    简介 Linux 是一套免费使用和自由传播的开放源码的类 UNIX 操作系统 英文解释为 Linux is not Unix 1991 年由林纳斯 托瓦兹 Linus Torvalds 在赫尔辛基大学上学时出于个人爱好而编写的 主要受到 M
  • 当TabLayout标签太多时,Tab显示拥挤导致出现省略号显示不全

    在布局文件中改控件添加这个属性 app tabMode scrollable
  • Centos7忘记root密码怎么办,root重置密码

    忘记系统管理员密码真是件头疼的事 centos7的拯救之路如下 第一步 重启系统 按 e 进入启动文件界面后 第二步 按 拉到底部 找到linux16这一行 将ro改成rw 在这行最后面加上 init bin sh 第三步 然后按 Ctrl
  • python unittest教程_unittest最详细的教程(文末附视频资料)

    一 什么是unittest unittest是Python单元测试框架 类似于JUnit框架 unittest中有4个重要的概念 test fixture test case test suite test runner Testcase
  • Win10注册表无法保存对权限所作的更改拒绝访问

    转载 https blog csdn net qq 37674858 article details 107876060 在对系统的安全控制得越来越多的情况下 要对注册表的关键数据进行修改是件挺麻烦的事 时不时会弹出无法保存对xxxxxx权
  • 为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用

    快科技7月18日消息 微软日前确认今年4季度推出Win11 23H2 这是Win11第二个年度更新 Win11 23H2具体有哪些功能升级 现在还不好说 但它会集成微软的Copilot 它很容易让人想到多年前的 曲别针 助手 但这次是AI技
  • canvas绘制气泡

    思路 使用Math random 函数绘制是个不同位置 大小 颜色的圆形 然后设置定时器 前一个状态用一个与画布相同颜色的背景图片进行覆盖 改变圆形的位置 每次改变都是在这张空白的背景图片上面重新进行重新绘制的过程 源码