效果图

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用数组方式做出下雨效果的更多相关文章

  1. 使用 Canvas 和 JavaScript 创建逼真的下雨效果

    HTML5 规范引进了很多新特性,其中最令人期待的之一就是 Canvas 元素,HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法,非常强大.这里向大家展示一个使用 Canva ...

  2. 数组方式使用jQuery对象

    一. 使用jQuery选择器获取结果是一个jQuery对象.然而,jQuery类库会让你感觉你正在使用一个定义了索引和长度的数组.在性能方面,建议使用简单的for或者while循环来处理,而不是$.e ...

  3. HTML5 Canvas 实现的9个 Loading 效果

    Sonic.js 是一个很小的 JavaScript 类,用于创建基于 HTML5 画布的加载图像.更强大的是 Sonic.js 还提供了基于现成的例子的创建工具,可以帮助你实现更多自定义的(Load ...

  4. Particles.js基于Canvas画布创建粒子原子颗粒效果

    文章目录 使用方法 自定义参数 相关链接 Particles.js是一款基于HTML5 Canvas画布的轻量级粒子动画插件,可以设置粒子的形状.旋转.分布.颜色等属性,还可以动态添加粒子,效果非常炫 ...

  5. 使用Unity3D自带动画系统制作下雨效果

    之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...

  6. Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

    Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...

  7. POST请求中参数以form data和request payload形式+清空数组方式

    测试与服务端ajax时用的dva封装的request方法,而后端怎么也拿不到参数.结果返现参数在request payload里. HTTP POST表单请求提交时:Content-Typeappli ...

  8. 6 cocos2dx粒子效果,类图关系,系统原生粒子和自己定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

     1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad ...

  9. 类模板、Stack的类模板实现(自定义链栈方式,自定义数组方式)

    一.类模板 类模板:将类定义中的数据类型参数化 类模板实际上是函数模板的推广,可以用相同的类模板来组建任意类型的对象集合 (一).类模板的定义 template  <类型形参表> clas ...

随机推荐

  1. ServerSocket详解及线程阻塞_03

    ServerSocket详解构造方法ServerSocket()ServerSocket(int port)ServerSocket(int port ,int backlog)serverSocke ...

  2. TinkPHP框架学习-03模型类

    1-----数据访问 2-----数据查询 3-----数据添加 4-----数据修改 5-----数据删除 创建一张nation表并写入三条测试数据 create table nation( `co ...

  3. Java中使用MongoDB

    一.为MongoDB设置用户名和密码 MongoDB中验证用户和密码的条件: 1. 服务器启动的时候打开授权认证,即修改MongoDB的配置文件mongodb.conf,增auth = true # ...

  4. php使用coreseek进行中文分词搜索

    方法一 使用coreseek源码自带testpack/api/test_coreseek.php代码,进行稍微修改就可以使用了,只不过需要引入”spinxapi.php“类 方法二--制作php扩展 ...

  5. 浅谈Unicode编码

    目录 1.概述 2.ASCII编码 3.历史问题 4.Unicode 4-1.Unicode 编码方案 4-2.关于bom 5.UTF-8 6.UTF-16 1.概述 对于ASCII编码,相信同学们都 ...

  6. [Sw] 使用 Swoole Server task/协程 处理大数据量异步任务时注意

    关于 Buffered Query 和 Unbuffered Query:http://www.php.net/manual/zh/mysqlinfo.concepts.buffering.php 对 ...

  7. cpanm Plack相关

    1.curl -L https://cpanmin.us | perl - --sudo App::cpanminus 参考:https://metacpan.org/pod/App::cpanmin ...

  8. mysql学习二、SQL常用数据类型

    一.常用数据类型 二.选择数据类型的原则: 1 业务需要 2 满足第一个条件下,需要存储空间最小的. 三.常用的选择数据类型思路:

  9. (转)IIS7无法读取配置文件解决办法

    web.config 太大导致”出现无法读取配置文件,因为它超过了最大文件大小”错误问题的解决方法,如下:HKLM\SOFTWARE\Microsoft\InetStp\Configuration\M ...

  10. cent os安装filebeat

    先贴一下官方文档https://www.elastic.co/guide/en/beats/filebeat/6.6/filebeat-installation.html 我本次使用rpm的方式安装, ...