基于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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
Jquery实战_读书笔记1—选择jQuery
Jan 22 Javascript
Js 冒泡事件阻止实现代码
Jan 27 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
jQuery基于闭包实现的显示与隐藏div功能示例
Jun 09 jQuery
小程序自定义组件实现城市选择功能
Jul 18 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
element 动态合并表格的步骤
Dec 31 Javascript
浅谈JavaScript作用域
Dec 06 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
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
基于python requests库中的代理实例讲解
2018/05/07 Python
儿童python练习实例
2018/05/27 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python getpass实现密文实例详解
2019/09/24 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
学校十一活动方案
2014/02/01 职场文书
清扬洗发水广告词
2014/03/14 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
学术研讨会主持词
2015/07/04 职场文书