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 相关文章推荐
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
js实现透明度渐变效果的方法
Apr 10 Javascript
针对初学者的jQuery入门指南
Aug 15 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
JavaScript操作选择对象的简单实例
May 16 Javascript
jquery表单插件Autotab使用方法详解
Jun 24 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
Vue防止白屏添加首屏动画的实例
Oct 31 Javascript
JS中准确判断变量类型的方法
Jun 01 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
php 在线打包_支持子目录
2008/06/28 PHP
php 随机生成10位字符代码
2009/03/26 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
初识Node.js
2015/03/20 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
js返回顶部实例分享
2016/12/21 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
租房协议书样本
2014/08/20 职场文书
活动总结模板大全
2015/05/11 职场文书
关于运动会的广播稿
2015/08/19 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers