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
juery框架写的弹窗效果适合新手
Nov 27 Javascript
关于js内存泄露的一个好例子
Dec 09 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
AngularJS 面试题集锦
Sep 06 Javascript
理解JavaScript原型链
Oct 25 Javascript
bootstrap multiselect下拉列表功能
Aug 22 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
jQuery 筛选器简单操作示例
Oct 02 jQuery
微信小程序实现多选框功能的实例代码
Jun 24 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
浅析我对JS延迟异步脚本的思考
Oct 12 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
深入array multisort排序原理的详解
2013/06/18 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
企业治理工作自我评价
2013/09/26 职场文书
宿舍使用违章电器检讨书
2014/01/12 职场文书
先进单位事迹材料
2014/12/25 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
mysql left join快速转inner join的过程
2021/06/30 MySQL
python可视化之颜色映射详解
2021/09/15 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript