基于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读取和设定KindEditor值的方法
Nov 22 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
Javascript 构造函数详解
Oct 22 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
Apr 22 Javascript
javascript每日必学之循环
Feb 19 Javascript
javascript拖拽应用实例
Mar 25 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
JS实现520 表白简单代码
May 21 Javascript
mpvue跳转页面及注意事项
Aug 03 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP 文件系统详解
2012/09/13 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Python 占位符的使用方法详解
2019/07/10 Python
Django密码存储策略分析
2020/01/09 Python
Python类及获取对象属性方法解析
2020/06/15 Python
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
求职意向书
2014/04/01 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
2014年底个人工作总结
2015/03/10 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
Redis Lua脚本实现ip限流示例
2022/07/15 Redis