canvas用数组方式做出下雨效果
效果图

1.做出canvas画布和声明一个用来存储雨滴的数组
var c=document.getElementById('myCanvas');
var ctx= c.getContext('2d');
var ary=[];
2.将雨滴的位置、大小得到
var x=Math.random()*;//在画布内随机生成雨滴x轴位置
var width=Math.random()*;//随机生成雨滴宽度
var h=Math.random()*+;//随机生成雨滴长度
var y=-;//雨滴出现位置
由于最后所有的东西都需要用setinterval包起来,所以这里的变量只能用做局部变量,不能用全局声明。
3.将生成的雨滴存到数组
var rain={
x:x,
y:y,
width:width,
color:"white",
h:h,
fun:function(){
ctx.beginPath();
ctx.fillStyle=rain.color;
ctx.fillRect(rain.x,rain.y,rain.width,rain.h);
ctx.fill();
}
};
ary.push(rain);
冒号前为键名,冒号后为之前声明的变量,用作键值,fun里是在画布上生成雨滴,最后通过push的方法将其存入数组。
4.让雨滴往下落,当雨滴落到画布外,将雨滴从数组中删除
var t=setInterval(function(){
rain.y+=;
if(rain.y>){
clearInterval(t);
ary.shift(rain);
}
},);
在外面调用生成雨滴的函数时,需要加上声明的json名,不然调用不到,如果雨滴的y轴位置大于了画布高度,就停止下落,同时,用shift的方式将雨滴移出数组。
5。删除雨滴下落时的前面生成过的雨滴
function hh(){
ctx.clearRect(,,,);
ary.forEach(function(obj){
obj.fun();
});
requestAnimationFrame(hh);
}
hh();
用clearrect的方式将整个画布上的内容清空,由于雨滴是每次下落5px时就会再出现一个新的雨滴,如果不删除下落之前的雨滴,画布上就会出现很多,将其清空只剩下一个下落的雨滴,最后调用函数即可。
canvas用数组方式做出下雨效果的更多相关文章
- 使用 Canvas 和 JavaScript 创建逼真的下雨效果
HTML5 规范引进了很多新特性,其中最令人期待的之一就是 Canvas 元素,HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法,非常强大.这里向大家展示一个使用 Canva ...
- 数组方式使用jQuery对象
一. 使用jQuery选择器获取结果是一个jQuery对象.然而,jQuery类库会让你感觉你正在使用一个定义了索引和长度的数组.在性能方面,建议使用简单的for或者while循环来处理,而不是$.e ...
- HTML5 Canvas 实现的9个 Loading 效果
Sonic.js 是一个很小的 JavaScript 类,用于创建基于 HTML5 画布的加载图像.更强大的是 Sonic.js 还提供了基于现成的例子的创建工具,可以帮助你实现更多自定义的(Load ...
- Particles.js基于Canvas画布创建粒子原子颗粒效果
文章目录 使用方法 自定义参数 相关链接 Particles.js是一款基于HTML5 Canvas画布的轻量级粒子动画插件,可以设置粒子的形状.旋转.分布.颜色等属性,还可以动态添加粒子,效果非常炫 ...
- 使用Unity3D自带动画系统制作下雨效果
之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...
- Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...
- POST请求中参数以form data和request payload形式+清空数组方式
测试与服务端ajax时用的dva封装的request方法,而后端怎么也拿不到参数.结果返现参数在request payload里. HTTP POST表单请求提交时:Content-Typeappli ...
- 6 cocos2dx粒子效果,类图关系,系统原生粒子和自己定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果
1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad ...
- 类模板、Stack的类模板实现(自定义链栈方式,自定义数组方式)
一.类模板 类模板:将类定义中的数据类型参数化 类模板实际上是函数模板的推广,可以用相同的类模板来组建任意类型的对象集合 (一).类模板的定义 template <类型形参表> clas ...
随机推荐
- Url的拦截问题
如果 在中没有, 就会去找欢迎页,先找/index,jsp,在webapp里并没有,就继续往下找/index.html, 是图中的拦截形式,就会被servlet拦截,对应于controller中的请求 ...
- xml是什么
XML(Extensible Markup Language)是可扩展标记语言,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 ...
- mysql 线程操作
show processlist;//查询mysql所有连接线程 SELECT CONCAT('KILL ',id,';') FROM information_schema.`PROCESSLIST` ...
- python3集合练习(set)
#集合是由不同元素组成;无序;集合中的元素必须是不可变类型;#s = {} 或者 s = set() 创建集合#update()扩展集合.返回值为Noneg1 = {'wcj','good','luc ...
- 查询Oracle版本
服务器端 Oracle: 1)select* from v$version; 2)select * from product_component_version; 3)set serveroutput ...
- [SF] Symfony 在 console 中结合 Workerman
在web框架的console中,命令不再是直接指定入口文件,如以往 php test.php start,而是类似 php app/console do 的形式. workerman 对命令的解析是 ...
- promise.then, setTimeout,await执行顺序问题
promise.then VS setTimeout 在chrome和node环境环境中均输出2, 3, 1, 先输出2没什么好说的,3和1顺序让人有些意外 原因: 有一个事件循环,但是任务队列可以有 ...
- selenium的browser.page_source无法返回页面内容
selenium的browser.page_source无法返回页面内容 可能是编码的问题.. html= (browser.page_source).encode('GBK', 'ignore') ...
- Models中字段的参数
(1)null 如果为True,Django 将用NULL 来在数据库中存储空值. 默认值是 False. (1)blank 如果为True,该字段允许不填.默认为False. 要注意,这与 null ...
- unittest框架(惨不忍睹低配版)
根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...