基于canvas实现的绚丽圆圈效果完整实例


Posted in Javascript onJanuary 26, 2016

本文实例讲述了基于canvas实现的绚丽圆圈效果。分享给大家供大家参考,具体如下:

运行效果截图如下:

基于canvas实现的绚丽圆圈效果完整实例

具体代码如下:

<!DOCTYPE html>
<html>
 <head>
  <title>demo</title>
  <style type="text/css">
   body {
    margin:0; background:black;
   }
   #canvas {
    border:3px solid gray; box-shadow:0px 0px 2px 2px #D5D5D5; margin-left:100px; margin-top:50px;
   }
   #power {
    position:fixed; bottom:50px; right:50px; 
   }
   #power a {
    color:green; text-decoration:none; display:inline-block; padding:20px; border:2px solid orange; box-shadow:0px 0px 2px 2px blue;
    font-size:30px;
   }
  </style>
 </head>
 <body>
  <canvas id="canvas" width="500px" height="500px"></canvas>
  <script type="text/javascript">
   var canvas = document.getElementById("canvas");
   var ctx = canvas.getContext("2d");
   var colorList = "abcdefABCDEF0123456789".split("");
   var colorListLength = colorList.length;
   var arcList = [];
   function createArc(attr) {
    ctx.beginPath();
    ctx.fillStyle = attr.color || "black";
    ctx.arc(attr.x, attr.y, attr.r, 0, Math.PI*2);
    ctx.closePath();
    ctx.fill();
   }
   function color() {
    var color = "#";
    for(var i=0; i<6; i++) {
     color += colorList[Math.round(Math.random()*colorListLength)];
    }
    return color;
   }
   function Arc() {
    this.count = 0;
    this.r = 5;
    this.x = Math.round(Math.random()*500);
    this.add = Math.round(Math.random()*5);
    this.limit = Math.round(Math.random()*100)
    this.mode = Math.round(Math.random());
    var _self = this;
    _self.run = function() {
     if(_self.r >= _self.limit) {
      _self.run = null;
      return;
     }
     _self.x += _self.add*(_self.mode == 1 ? 1 : -1);
     createArc({x: _self.x, y:Math.round(Math.random()*400), r: _self.r, color: color()});
     _self.r += 5;
     return _self;
    };
    return this;
   }
   var init_count = 150;
   var init_time = 0;
   var init = function() {
    init_time++;
    arcList.length = 0;
    for(var i=0; i<init_count; i++) {
     arcList.push(new Arc());
    }
   };
   var reInit = function() {
    var angle = Math.PI*2/init_count;
    for(var i=0; i<init_count; i++) {
     var _angle = i*angle;
     createArc({x: 250 + 250*Math.cos(_angle), y: 250 + 250*Math.sin(_angle), r: 5, color:color()});
     createArc({x: 250 + 200*Math.cos(_angle), y: 250 + 200*Math.sin(_angle), r: 5, color:color()});
     createArc({x: 250 + 150*Math.cos(_angle), y: 250 + 150*Math.sin(_angle), r: 5, color:color()});
     createArc({x: 250 + 100*Math.cos(_angle), y: 250 + 100*Math.sin(_angle), r: 5, color:color()});
    }
   };
   init();
   var globalInterval = setInterval(function() {
    ctx.clearRect(0, 0, 500, 500);
    var count = 0;
    for(var i=0; i<init_count; i++) {
     var arc = arcList[i];
     arc.run ? arc.run() : count++;
    }
    if(count == init_count) {
     if(init_time >= 2) {
      reInit();
      return;
     }
     init();
    }
   }, 100);
  </script>
 </body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
jqGrid用法汇总(全经典)
Jun 28 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
如何用js判断dom是否有存在某class的值
Feb 13 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
Mar 09 Javascript
详解angular中通过$location获取路径(参数)的写法
Mar 21 Javascript
angular+webpack2实战例子
May 23 Javascript
微信小程序开发教程之增加mixin扩展
Aug 09 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 #Javascript
js实现的页面矩阵图形变换特效
Jan 26 #Javascript
JS实现简单的二维矩阵乘积运算
Jan 26 #Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 #Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
一篇文章掌握RequireJS常用知识
Jan 26 #Javascript
JS正则表达式比较常见用法
Jan 26 #Javascript
You might like
php 什么是PEAR?
2009/03/19 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
用javascript实现给图片加链接
2007/08/15 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue项目实现图片上传功能
2019/12/23 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python读文件的步骤
2019/10/08 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
企业门卫岗位职责
2013/12/12 职场文书
销售心得体会
2014/01/02 职场文书
感恩寄语大全
2014/04/11 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis