基于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 相关文章推荐
文本框中,回车键触发事件的js代码[多浏览器兼容]
Jun 07 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
js控制table合并具体实现
Feb 20 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
Javascript 实现匿名递归的实例代码
May 25 Javascript
JavaScript中附件预览功能实现详解(推荐)
Aug 15 Javascript
axios携带cookie配置详解(axios+koa)
Dec 28 Javascript
vue 微信扫码登录(自定义样式)
Jan 06 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
如何开发一个渐进式Web应用程序PWA
May 10 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
安装APACHE
2007/01/15 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
js实时监听文本框状态的方法
2011/04/26 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
Python使用xpath实现图片爬取
2020/09/16 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
计算机专业优秀大学生自我总结
2014/01/21 职场文书
个人授权委托书
2014/04/03 职场文书
争先创优公开承诺书
2014/08/30 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
小学生思想品德评语
2014/12/31 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
Python中json.dumps()函数的使用解析
2021/05/17 Python
对Keras自带Loss Function的深入研究
2021/05/25 Python
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js