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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
图片格式的JavaScript和CSS速查手册
Aug 20 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
js鼠标滑过图片震动特效的方法
Feb 17 Javascript
JQuery基础语法小结
Feb 27 Javascript
前端性能优化及技巧
May 06 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
在vue 中使用 less的教程详解
Sep 26 Javascript
vscode中使用npm安装babel的方法
Aug 02 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的栏目导航程序
2006/10/09 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
PHP常用处理静态操作类
2015/04/03 PHP
php中define用法实例
2015/07/30 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
Vue.js组件通信的几种姿势
2017/10/23 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
Python Tkinter GUI编程入门介绍
2015/03/10 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
python matplotlib画图实例代码分享
2017/12/27 Python
浅谈Python中的私有变量
2018/02/28 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
Django实现学生管理系统
2019/02/26 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
心得体会范文
2014/01/04 职场文书
财务会计专业求职信
2014/06/09 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
Elasticsearch 基本查询和组合查询
2022/04/19 Python