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 相关文章推荐
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
Jul 13 Javascript
谈谈JavaScript中的函数与闭包
Apr 14 Javascript
当前页禁止复制粘贴截屏代码小集
Jul 24 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
Jun 08 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
微信小程序用户自定义模版用法实例分析
Nov 28 Javascript
详解JS中统计函数执行次数与执行时间
Sep 04 Javascript
vue实现重置表单信息为空的方法
Sep 29 Javascript
解决Vue中 父子传值 数据丢失问题
Aug 27 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学习笔记之二
2011/01/17 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
PHP实现小偷程序实例
2016/10/31 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
jquery 上下滚动广告
2009/06/17 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
使用python进行拆分大文件的方法
2018/12/10 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
制药工程专业毕业生推荐信
2013/12/24 职场文书
售后求职信范文
2014/03/15 职场文书
低碳生活倡议书
2014/04/14 职场文书
公司年终奖分配方案
2014/06/16 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
体育个人工作总结
2015/02/09 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技