基于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 相关文章推荐
jquery提升性能最佳实践小结
Dec 06 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
Nov 05 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
JS烟花背景效果实现方法
Mar 03 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
Sep 16 Javascript
JS基础随笔(菜鸟必看篇)
Jul 13 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
详解JavaScript的BUG和错误
May 07 Javascript
Vue v-for循环之@click点击事件获取元素示例
Nov 09 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 jQuery
基于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
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
php使用正则验证中文
2016/04/06 PHP
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
Python实现配置文件备份的方法
2015/07/30 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
python实现中文转换url编码的方法
2016/06/14 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
C语言50道问题
2014/10/23 面试题
个人教师自我评价范文
2013/12/02 职场文书
高三体育教学反思
2014/01/29 职场文书
高三毕业寄语
2014/04/10 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书