思路:使用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>
效果图:

缺陷:

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

												

canvas绘制气泡的更多相关文章

  1. java-js知识库之二——canvas绘制炫彩气泡

    现在使用canvas绘制气泡,虽说很多人都已经实现过了,可能方法都大同小异,但自己写和看别人写完全是两码事,自己会写的才是自己的,话不多说,直接上代码. 先来一张效果图: 现在上代码,代码有详细的注释 ...

  2. HTML5学习总结——canvas绘制象棋(canvas绘图)

    一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...

  3. 用canvas绘制折线图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 封装 用canvas绘制直线的函数--面向对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 学习笔记:HTML5 Canvas绘制简单图形

    HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...

  6. canvas绘制经典折线图(一)

    最终效果图如下: 实现步骤如下:注-引用了jQuery HTML代码 <!doctype html> <html lang="en"> <head&g ...

  7. Canvas绘制图形

    1.Canvas绘制一个蓝色的矩形 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  8. [canvas]利用canvas绘制自适应的折线图

    前段时间学习了用canvas绘制折现图,且当画布变换大小,折现图会随之变化,现附上代码 <!DOCTYPE html> <html lang="en"> & ...

  9. 使用Canvas绘制背景图

    原文  http://www.imququ.com/post/use-canvas-as-background-image.html 最近iCloud Web的Beta版换了UI,整体风格变得和iOS ...

随机推荐

  1. CodeForces - 660D:Number of Parallelograms (问N个点多少个平行四边形)

    pro:给定N个点,问多少个点组成了平行四边形.保证没有三点共线. sol:由于没有三点贡献,所以我们枚举对角线,对角线的中点重合的就是平行四边形.如果没说保证三点不共线就不能这么做,因为有可能4个点 ...

  2. VSCode 常用的快捷键

    R键:点击后热加载,直接查看预览结果 P键: 在虚拟机中显示网格,常用 O 键:切换iOS 和Android Q键 :退出调试 ctr +~  打开 终端

  3. alpha冲刺(2/10)

    前言 队名:旅法师 作业链接 队长博客 燃尽图 会议 会议照片 会议内容 陈晓彬(组长) 今日进展: 召开会议 安排任务 博客撰写 构建之法的阅读 问题困扰: 分配任务,还是不熟练,对后台不熟悉,不知 ...

  4. python函数之第一类对象

    目录 python函数之第一类对象 python函数之第一类对象 第一类对象(英语:First-class object)在计算机科学中指可以在执行期创造并作为参数传递给其他函数或存入一个变数的实体. ...

  5. java post json sample

    import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class Te ...

  6. 知识点:Java 集合框架图

    知识点:Java 集合框架图 总结:Java 集合进阶精讲1 总结:Java 集合进阶精讲2-ArrayList Java集合框架图 我们经常使用的Arrayist.LinkedList继承的关系挺复 ...

  7. sas 获取数据集观测数量

    DATA _NULL_;SET SASHELP.CLASS NOBS=N;CALL SYMPUTX('N',N);STOP;RUN; %PUT N=&N.; 运行结果: 57 DATA _NU ...

  8. 学习 MeteoInfo二次开发教程(六)

    在教程(五)的基础上加了Faded,Grid_Fill,Grid_Point,Raster,Vector,Barb,Streamline 1.同样注意修改LegendStyleEnum改为Legend ...

  9. 使用Go编写WebAssembly

    I. Install go 1. down https://golang.org/dl/ go1.12.3.windows-amd64.zip 2. set path (1) GOROOTvar na ...

  10. 用PS做圆角图片

    ps: Adobe Photoshop CS2  如果图片被锁定,请“双击”图层中“背景”解锁,如果没有图层菜单,在最上面导航栏中:窗口—图层.如下图:  点“确定”,解锁.  选用“圆角矩形工具”. ...