基于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 相关文章推荐
基于SVG的web页面图形绘制API介绍及编程演示
Jun 28 Javascript
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
Javascript堆排序算法详解
Dec 03 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
Aug 26 Javascript
jquery选择器简述
Aug 31 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
JavaScript取得gridview中获取checkbox选中的值
Jul 24 Javascript
JS实现的base64加密解密操作示例
Apr 18 Javascript
使用electron制作满屏心特效的示例代码
Nov 27 Javascript
vue项目每30秒刷新1次接口的实现方法
Dec 04 Javascript
刷新页面后让控制台的js代码继续执行
Sep 20 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
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
php旋转图片90度的方法
2013/11/07 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
javascript动态加载三
2012/08/22 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Python实现结构体代码实例
2020/02/10 Python
sklearn+python:线性回归案例
2020/02/24 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
一套C++笔试题面试题
2012/06/06 面试题
总经理职责范文
2013/11/08 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL