雨滴特效


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>汇制雨滴</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
canvas{
display: block;
/*vertical-align: middle;*/
background: #000;
}
</style>
</head>
<body>
<canvas id="canvas">您的浏览器不支持画布,请您更换浏览器</canvas>
</body>
<script type="text/javascript">
var can = document.getElementById('canvas');
//设置2d绘图
var ctx = can.getContext('2d') //获取浏览器窗口的宽高
var w = can.width = window.innerWidth;
var h = can.height = window.innerHeight; //自适应浏览器宽高
window.onresize = function(){
w = can.width = window.innerWidth;
h = can.height = window.innerHeight;
} //canvas绘制矩形
//设置矩形框的路径
//ctx.rect(x,y,w,h); //xy 坐标 wh宽高
//画出来
//ctx.fill(); //填充方法
//stx.stroke(); //触笔方法 空心的
// ctx.fillStyle = 'red';
// ctx.fillRect(100,100,100,100)
// //绘制圆形
// ctx.arc(250,250,50,0,Math.PI*2,false)
// ctx.strokeStyle = 'red';
// ctx.stroke(); //运动
// var y = 0;
// setInterval(function(){
// y++;
// //先清空再绘制
// ctx.clearRect(0,0,w,h);
// ctx.fillRect(100,y,100,100)
// },30)
//雨滴特效
function Drop(){ //创建雨滴类 }
//原型
Drop.prototype ={
//初始化
init:function(){
this.x = rand(0,w);//雨滴的初始X坐标
this.y = 0;//雨滴的初始Y坐标
this.vy = rand(4,5) //雨滴下落的速度
this.l = rand(0.8*h,0.9*h);//雨滴下落的最大高度
this.r = 1;//初始半径
this.vr = 1; //半径增大的速度
this.a = 1; //初始透明度
this.va = 0.9; //透明度变化系数
},
//绘制
draw:function(){
if (this.y>this.l) {
ctx.beginPath() //开始路径
//绘制波纹(圆形)
ctx.arc(this.x,this.y,this.r,0,Math.PI*2,false)
ctx.strokeStyle = 'rgba(0,255,255,'+ this.a + ')';
ctx.stroke();
}else{
//绘制下落的雨滴
//ctx.clearRect(0,0,w,h);
ctx.fillStyle = 'rgba(0,255,255,1)'
ctx.fillRect(this.x,this.y,2,10);
} this.update();
},
//更新坐标
update:function(){
//当y坐标小于1高度的时候就一直累加
if (this.y<this.l) {
this.y += this.vy;
}else{
//圆形半径增大
// if (this.r<50) {
// this.r += this.vr;
// }else{
//
// }
//判断透明度
if (this.a>0.03) {
this.r += this.vr;
if (this.r > 50) {
this.a *= this.va;
}
}else{
//重新初始化了
this.init()
} }
// this.y += this.vy;
}
}
//实例化雨滴对象
// var drop = new Drop();
// drop.init(); var drops = [];
for (var i=0; i<30; i++) {
setTimeout(function(){
var drop = new Drop();
drop.init();
drops.push(drop);
},i*200) } setInterval(function(){
//绘制一个透明层
ctx.fillStyle = 'rgba(0,0,0,0.1)';
ctx.fillRect(0,0,w,h)
for (var i=0; i<drops.length; i++) {
drops[i].draw()
}
// drop.draw()
},1000/60); //帧数 function rand(min,max){
return Math.random()*(max-min) +min;//min~MAX
}
</script>
</html>

结合canvas做雨滴特效的更多相关文章

  1. HTML5 canvas生成图片马赛克特效插件

    HTML5 canvas生成图片马赛克特效插件 简要教程 这是一款使用html5 canvas来将图片制作成马赛克效果的js插件.该插件的灵感来自于美国肖像画家Chuck Close.已经有人使用这个 ...

  2. href 做导航 特效

    <div> <div> <%for (int i = 0; i < 200; i++) { %><%=i.ToString() %> <br ...

  3. Canvas与javaScript特效笔记

    第六章   Canvas与javaScript特效笔记 q  <canvas>标签的用途 HTML5 canvas 提供了通过 JavaScript 绘制图形的方法,此方法使用简单但功能强 ...

  4. 用Canvas做动画

    之前看过不少HTML5动画的书,讲解的是如何去做,对于其中的数学原理讲解的不详细,常有困惑.最近看的<HTML5+JavaScript 动画基础>这个是译本,Keith Peters曾写过 ...

  5. canvas之背景特效

    需具备js基础知识以及canvas相关方法(可查阅相关文档) 下面是一篇有关js与canvas的背景特效 基于面向过程的思维 <!DOCTYPE html> <html> &l ...

  6. 我们能用canvas做什么?

    什么是Canvas? Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像.Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度.JavaScript代码可以访问该地区,通过 ...

  7. html5 canvas做的图表插件

    用highchart的时候发现它是用svg来画图的,那么用canvas来做怎么样的. 以前做AS图表插件的时候,绘制图画主要用容器的Graphics对象来绘制,而canvas的context和Grap ...

  8. canvas做动画

    一.绘制图片 ①加载图片 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  9. CANVAS模仿龙卷风特效

    大学时候,有一段时间对flash比较感兴趣.去图书馆借了一本很厚很厚的falsh书籍. 翻了几页之后,就再没有往后看过.印象比较深的是作者说他用flash完成了一个龙卷风效果. 一直到现在我也没有看到 ...

随机推荐

  1. TP view中跳转到某个控制器

    #直接用 __MODULE__/控制器名/方法名/参数名/参数 <a href="__MODULE__/Product/list_table/goods_id/<?php ech ...

  2. jdk的安装 打包jar 运行jar

    安装 系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME ...

  3. OpenCV中Kinect的使用(3)

    接OpenCV中Kinect的使用(2),下面内容主要讲述使用OpenNI 控制Kinect 的马达,实现摄像头的上下摆动. 下面是透过OpenNI比较低阶的USB控制介面(XnUSB.h),来做到马 ...

  4. Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成

    Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下: Web 模块提供面向web的基本功能和面向web的应用上下文,比如多部分(multipa ...

  5. html表格上下居中

    在表格外面嵌套另一个高度为 100% 的表格,外层的表格设置 td 的 valign 属性 为 middle <table width="100%" height=" ...

  6. 用VS2010进行CMAKE的时候“LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”

    由于要编译LTP,LTP在MINGW下又不能编译,所以忍痛安装了VS2010+CMAKE. 由于VS在本科时候虐我千百遍,所以一直心存阴影... 转入正题,当cmake的时候, 它提示 “LINK : ...

  7. SlidingMenu官方实例分析3——PropertiesActivity

    PropertiesActivity此类主要是对SlidingMenu设置的一些展示,也是为了使用者能快速的掌握SlidingMenu 的特点. 首先获得SlidingMenu对象: SlidingM ...

  8. W​o​r​d​P​r​e​s​s​常​用​标​签​和​调​用​总​结

    调用头部模板<?php get_header();?> 调用尾部模板<?php get_footer();?> 调用侧边栏<?php get_sidebar();?> ...

  9. cocos2d-x设计模式发掘之一:单例模式

       作者: firedragonpzy  原地址:http://www.firedragonpzy.com.cn/index.php/archives/1781 本系列文章我将和大家一起来发掘coc ...

  10. Git使fork项目与源项目保持一致方法

    Github上经常干的一件事情是看到好的项目,总会fork到自己的项目列表里,但是源项目如果更新了,怎么同步到我们自己的fork项目呢? 操作如下: 先clone自己的fork项目到本地工程目录, g ...