基于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技巧--转义符&quot;\&quot;的妙用
Jan 09 Javascript
JS获取scrollHeight问题想到的标准问题
May 27 Javascript
复制小说文本时出现的随机乱码的去除方法
Sep 07 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
js实现无缝滚动特效
Dec 20 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
JS中call()和apply()的功能及用法实例分析
Jun 28 Javascript
js实现掷骰子小游戏
Oct 24 Javascript
原生JavaScript实现进度条
Feb 19 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 数学运算验证码实现代码
2009/10/11 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
jquery 图片轮换效果
2010/07/29 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
vue项目中添加单元测试的方法
2018/07/21 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
Python线性回归实战分析
2018/02/01 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python pymsql模块的使用
2020/09/07 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
求职者怎样写自荐信
2014/04/13 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公民授权委托书
2014/10/15 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
会计工作态度自我评价
2015/03/06 职场文书
婚育证明样本
2015/06/16 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
Python基础详解之描述符
2021/04/28 Python
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript