JavaScript+html5 canvas制作的百花齐放效果完整实例


Posted in Javascript onJanuary 26, 2016

本文实例讲述了JavaScript+html5 canvas制作的百花齐放效果。分享给大家供大家参考,具体如下:

运行效果截图如下:

JavaScript+html5 canvas制作的百花齐放效果完整实例

具体代码如下:

<!DOCTYPE html>
<html>
 <head>
  <title>demo</title>
  <style type="text/css">
   body {
    margin:0; padding:0; 
   }
   #canvas {
    border:5px solid gray; box-shadow:0 0 15px 15px #494949 inset;
    margin-top:50px; margin-left:200px;
   }
  </style>
 </head>
 <body >
  <canvas id="canvas" width="1000px" height="500px"></canvas>
  <script type="text/javascript">
   var dyl = {};
   dyl.canvas = document.getElementById("canvas");
   dyl.ctx = dyl.canvas.getContext("2d");
   dyl.runTime = 0;
   dyl.colorList = "01234567890ABCDEFabcdef".split("");
   dyl.colorListLength = dyl.colorList.length;
   dyl.arcList = null;
   /**
   * 得到16进制随机颜色值
   */
   dyl.getColor = function() {
    var color = "#";
    for(var i=0; i<6; i++) {
     color += dyl.colorList[Math.floor(Math.random()*dyl.colorListLength)];
    }
    return color;
   };
   /**
   * 一个随机角度,随机初始速度的斜抛对象
   */
   var Arc = function(i) {
    // 设置自有属性
    this.v = Math.round(Math.random()*100)+50;
    this.angle = Math.round(Math.random()*145) + 45;
    this.startTime = +new Date();
    this._angle = this.angle/180*Math.PI;
    this.v_x = this.v*Math.cos(this._angle);
    this.v_y_start = this.v*Math.sin(this._angle);
    this.color = dyl.getColor();
    this.x = 500;
    this.g = 250;
    this.y = 490;
    this.index = i;
    var _self = this;
    this.run = function() {
     var endTime = +new Date();
     var timeSpan = (endTime - _self.startTime)/1000;
     var v_y_now = _self.v_y_start - 1/2*_self.g*Math.pow(timeSpan, 2);
     _self.x = _self.x +_self.v_x * timeSpan;
     _self.y = _self.y - (_self.v_y_start * timeSpan - 1/2*_self.g*Math.pow(timeSpan, 2));
     return this;
    };
    return this;
   };
   /**
   * 全局绘制图像
   */
   dyl.draw = function() {
    var arcList = dyl.arcList;
    var ctx = dyl.ctx;
    dyl.runTime++;
    for(var i=0, length=arcList.length; i<length; i++) {
     var arc = arcList[i];
     if(!arc) {
      continue;
     }
     arc.run();
     ctx.save();
     ctx.beginPath();
     ctx.fillStyle = arc.color;
     ctx.arc(arc.x, arc.y, 2, 0, Math.PI*2);
     ctx.fill();
     ctx.closePath();
     ctx.restore();
    }
    console.log(dyl.runTime);
    if(dyl.runTime >= 25) {
     setTimeout(dyl.init, 1050);
    } else {
     setTimeout(dyl.draw, 20);
    }
   };
   /**
   * 初始化整个事件
   */
   dyl.init = function() {
    dyl.ctx.clearRect(0, 0, 1000, 500);
    dyl.arcList = [];
    dyl.runTime = 0;
    for(var i=0; i<100; i++) {
     dyl.arcList.push(new Arc(i));
    }
    dyl.draw();
   };
   dyl.init();
  </script>
 </body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
Angular 根据 service 的状态更新 directive
Apr 03 Javascript
jQuery Mobile框架中的表单组件基础使用教程
May 17 Javascript
vue-dialog的弹出层组件
May 25 Javascript
Vue的elementUI实现自定义主题方法
Feb 23 Javascript
vue裁切预览组件功能的实现步骤
May 04 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
Vue页面跳转传递参数及接收方式
Sep 09 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 #Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 #Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
Jan 26 #Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 #Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
Jan 26 #Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 #Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 #Javascript
You might like
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
vue地区选择组件教程详解
2018/05/04 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python爬虫爬取网页表格数据
2018/03/07 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
CSS3 边框效果
2019/11/04 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
出纳岗位职责模板
2013/11/27 职场文书
政治思想表现评语
2014/05/04 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
python基础之while循环语句的使用
2021/04/20 Python
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
DE1107机评
2022/04/05 无线电