现在使用canvas绘制气泡,虽说很多人都已经实现过了,可能方法都大同小异,但自己写和看别人写完全是两码事,自己会写的才是自己的,话不多说,直接上代码。

先来一张效果图:

现在上代码,代码有详细的注释,简单易懂:

  1. <!--html只有一个canvas标签-->
  2. <canvas id="canvas"></canvas>
  1. //获取canvas标签
  2. var canvas = document.getElementById("canvas");
  3. //定义画布的高和宽,定义为屏幕的高宽
  4. canvas.width = document.documentElement.clientWidth-20;
  5. canvas.height = document.documentElement.clientHeight-20;
  6. //获取2d画布
  7. var ctx = canvas.getContext("2d");
  8. //定义存放气泡的数组
  9. var bubbleArr = [];
  10.  
  11. //定义气泡的对象
  12. function Bubble(x,y,r,dx,dy){
  13. this.x = x;//气泡的x坐标
  14. this.y = y;//气泡的y坐标
  15. this.r = r;//气泡的半径
  16. this.dx = dx;//气泡运动的x偏移量
  17. this.dy = dy;//气泡运动的y偏移量
  18. bubbleArr.push(this);//将对象放入气泡数组
  19. }
  20.  
  21. Bubble.prototype.move = function(){
  22. this.x += this.dx;//气泡x偏移量
  23. this.y += this.dy;//气泡y偏移量
  24. this.r--;//气泡半径减小
  25. }
  26.  
  27. Bubble.prototype.go = function(){
  28. //气泡的颜色,随机生成
  29. ctx.fillStyle = "rgba("+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+",0.7)";
  30. //开始画气泡
  31. ctx.beginPath();
  32. //画圆 参数依次为:圆心x坐标、圆心y坐标、半径、弧度开始位置、弧度结束位置、是否顺时针
  33. ctx.arc(this.x,this.y,this.r,0,2*Math.PI,true);
  34. //填充
  35. ctx.fill();
  36. }
  37.  
  38. //定义鼠标移动事件
  39. document.onmousemove = function(ev){
  40. //获取当前的dom,兼容ie
  41. var e = ev || window.event;
  42. //实例化对象,半径在100以内随机生成,偏移量在-20~20之间随机生成
  43. new Bubble(e.clientX,e.clientY,Math.floor(Math.random()*100),Math.floor(Math.random()*20)-Math.floor(Math.random()*20),Math.floor(Math.random()*20)-Math.floor(Math.random()*20));
  44. }

  45. //定时器,一秒执行50次,每次都会改变气泡的半径和偏移量
  46. setInterval(function(){
  47. //现将画布清屏
  48. ctx.clearRect(0,0,canvas.width,canvas.height);
  49. //循环气泡数组,存在并且半径大于0,则生成气泡
  50. for(var i = 0;i < bubbleArr.length;i++){
  51. bubbleArr[i].move();
  52. if(bubbleArr[i].r<0){
    //半径小于0,将对象从数组清除
  53. bubbleArr.splice(i,1);
  54. }else{
  55. bubbleArr[i].go();
  56. }
  57. }
  58. },20);

相信都能看得懂,代码也可以复制到html里直接运行,很简单的逻辑,代码也简单,如有兴趣可点击下方链接看看效果,鼠标在页面移动即可。

canvas绘制炫彩气泡展示链接:http://yktzs.top/canvas/bubble.html 。

如有错误,欢迎指正QQ:1505771465

java-js知识库之二——canvas绘制炫彩气泡的更多相关文章

  1. java-js知识库之一——canvas绘制9*9乘法表

    不知不觉一年又要过去了,软件这一行入坑快两年了,一直不知道这两年干了些啥,也不知道自己到底会些什么,工作也是些简单的东西,谁都能做,对未来也是很茫然.今天和同事优化数据库,头都是懵的,很多东西都感觉似 ...

  2. [js高手之路]html5 canvas动画教程 - 跟着鼠标移动消失的一堆炫彩小球

    综合利用前面所学,实现一个绚丽的小球动画,这个实例用到的知识点,在我的博客全部都有,可以去这里查看所有的canvas教程 <head> <meta charset='utf-8' / ...

  3. canvas基础入门(二)绘制线条、三角形、七巧板

    复杂的内容都是有简单的线条结合而成的,想要绘制出复杂好看的内容先从画直线开始 canvas绘制直线先认识几个函数 beginPath():开始一条路径,或重置当前的路径 moveTo(x,y):用于规 ...

  4. 一次js自定义播放器,canvas绘制弹幕的尝试

    不多bb,就直接说实现了什么功能: 1. 视频播放进度调整 2. 视频小窗口实时预览 3. 声音调整 4. 画中画模式 5. 网页全屏 6. 视频全屏 7. canvas绘制弹幕 8. 选中弹幕悬停 ...

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

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

  6. WebGL入门教程(二)-webgl绘制三角形

    前面已经介绍过了webgl,WebGL入门教程(一)-初识webgl(http://www.cnblogs.com/bsman/p/6128447.html),也知道了如何绘制一个点,接下来就用web ...

  7. 用canvas绘制一个时钟

    实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...

  8. HTML5—canvas绘制图形(1)

    1.canvas基础知识 canvas元素是HTML5中新增的一个重要的元素,专门用来绘制图形,不过canvas本身不具备画图的能力,在页面中放置了canvas元素,就相当于在页面中放置了一块矩形的“ ...

  9. 超多经典 canvas 实例,动态离子背景、移动炫彩小球、贪吃蛇、坦克大战、是男人就下100层、心形文字等等等

    超多经典 canvas 实例 普及:<canvas> 元素用于在网页上绘制图形.这是一个图形容器,您可以控制其每一像素,必须使用脚本来绘制图形. 注意:IE 8 以及更早的版本不支持 &l ...

随机推荐

  1. ERROR internal error: process exited while connecting to monitor

    centos7.4 创建kvm虚拟机时报错 问题: [root@oldboy ~]# virt-install --virt-type kvm --os-type=linux --os-variant ...

  2. Logstash使用介绍

    Logstash介绍 Logstash是一个数据收集处理转发系统,是 Java开源项目. 它只做三件事: 数据输入 数据加工(不是必须的):如过滤,改写等 数据输出   下载安装 logstash是基 ...

  3. python笔记—循环控制

    1.print可以打印多个参数,在括号内用,号区分,显示时一个,号显示一个空格 2.import导入时可以用as别名代替,方便两个模块中有相同函数时使用 3.序列解包:将一个序列(或任何可迭代对象)解 ...

  4. luogu准备复习(学习)题单

    矩阵乘法 P1306 exbsgs P4195 网络流(割点) P1345 主席树 P3302

  5. vue文档阅读笔记——计算属性和侦听器

    页面链接:https://cn.vuejs.org/v2/guide/computed.html 注意点 计算属性用于 替代模板内的表达式. 如果计算属性所依赖的属性未更新,会返回自身的缓存. 侦听器 ...

  6. python-Word模板填充-docxtpl

    docxtpl 按指定的word模板填充内容 安装 pip install docxtpl 示例 from docxtpl import DocxTemplate data_dic = { 't1': ...

  7. BeanUtils的copyproPerties方法的用法

    转自:Hassan Blog的博客 一.简介:  BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包 ...

  8. kafka consumer 配置详解

    1.Consumer Group 与 topic 订阅 每个Consumer 进程都会划归到一个逻辑的Consumer Group中,逻辑的订阅者是Consumer Group.所以一条message ...

  9. 虹软离线人脸识别 ArcFace 2.0 Demo [C++]

    环境: win10(10.0.16299.0)+ VS2017 sdk版本:ArcFace v2.0 OPENCV3.43版本 x64平台Debug.Release配置都已通过编译 下载地址:http ...

  10. HBase详解

    1.   hbase简介 1.1.  什么是hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. H ...