基于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 输入框内容格式验证代码
Feb 11 Javascript
详解js闭包
Sep 02 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
Sep 19 Javascript
js实现网页抽奖实例
Aug 05 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
实例讲解JavaScript截取字符串
Nov 30 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
Feb 09 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
Sep 24 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
模仿OSO的论坛(三)
2006/10/09 PHP
php中文验证码实现示例分享
2014/01/12 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
php接口隔离原则实例分析
2019/11/11 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
关于微信小程序登录的那些事
2019/01/08 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Python生成数字图片代码分享
2017/10/31 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
Python绘制3D图形
2018/05/03 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
日期和时间问题
2015/01/04 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
护士自我鉴定总结
2014/03/24 职场文书
村党支部书记承诺书
2014/05/29 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
先进个人自荐书
2015/03/06 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
python状态机transitions库详解
2021/06/02 Python