基于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 相关文章推荐
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
Dec 27 Javascript
SeaJS入门教程系列之使用SeaJS(二)
Mar 03 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
JS小游戏之宇宙战机源码详解
Sep 25 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
js实现动态显示时间效果
Mar 06 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 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
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
党员大会主持词
2014/04/02 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2015年清明节网上祭英烈活动总结
2015/03/26 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
中标通知书范本
2015/04/17 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
创业计划书之外语培训班
2019/11/02 职场文书