基于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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
window.onload追加函数使用示例
Mar 03 Javascript
EasyUI中实现form表单提交的示例分享
Mar 01 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
JS实现网页上随机产生超链接地址的方法
Nov 09 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
Jun 24 Javascript
React根据宽度自适应高度的示例代码
Oct 11 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
vue二级路由设置方法
Feb 09 Javascript
vue.js中实现登录控制的方法示例
Apr 23 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
微信小程序实现电影App导航和轮播
Nov 30 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
destoon各类调用汇总
2014/06/20 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
js实现3D旋转效果
2020/08/18 Javascript
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python转换时间的图文方法
2019/07/01 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
金融管理专业毕业生求职信
2014/03/12 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
先进人物事迹材料
2014/12/29 职场文书
地震慰问信
2015/02/14 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
中秋节感想
2015/08/10 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL