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 相关文章推荐
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
javascript new fun的执行过程
Aug 05 Javascript
jquery实现输入框动态增减的实例代码
Jul 14 Javascript
JavaScript生成GUID的多种算法小结
Aug 18 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
javascript实现仿腾讯游戏选择
May 14 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
JS实现碰撞检测的方法分析
Jan 19 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
Aug 17 Javascript
使用微信小程序开发弹出框应用实例详解
Oct 18 Javascript
js获取 gif 的帧数的代码实例
Sep 10 Javascript
JavaScript实现Tab选项卡切换
Feb 13 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中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
JavaScript实现拼音排序的方法
2012/11/20 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
JavaScript中各数制转换全面总结
2017/08/21 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
pytorch实现线性拟合方式
2020/01/15 Python
Python 面向对象部分知识点小结
2020/03/09 Python
中学生在校期间的自我评价分享
2013/11/13 职场文书
学生会主席竞聘书
2014/03/31 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
创业计划书之美容店
2019/09/16 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
详解Python中下划线的5种含义
2021/07/15 Python