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 相关文章推荐
用jquery等比例控制图片宽高的具体实现
Jan 28 Javascript
input:checkbox多选框实现单选效果跟radio一样
Jun 16 Javascript
底部悬浮通栏可以关闭广告位的实现方法
Jun 01 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
JavaScript实战之带收放动画效果的导航菜单
Aug 16 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
完美实现js焦点轮播效果(一)
Mar 07 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 Javascript
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
前端实现滑动按钮AJAX与后端交互的示例代码
Feb 24 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
动易数据转成dedecms的php程序
2007/04/07 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP7 标准库修改
2021/03/09 PHP
JS 常用校验函数
2009/03/26 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
vue生命周期实例小结
2018/08/15 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
python中的闭包用法实例详解
2015/05/05 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
详解python eval函数的妙用
2017/11/16 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
求职简历的自我评价
2014/01/31 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
寒假安全保证书
2015/02/28 职场文书
初中语文教学研修日志
2015/11/13 职场文书
离婚协议书范文2016
2016/03/18 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
Oracle使用别名的好处
2022/04/19 Oracle