结合canvas做雨滴特效
雨滴特效
<!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做雨滴特效的更多相关文章
- HTML5 canvas生成图片马赛克特效插件
HTML5 canvas生成图片马赛克特效插件 简要教程 这是一款使用html5 canvas来将图片制作成马赛克效果的js插件.该插件的灵感来自于美国肖像画家Chuck Close.已经有人使用这个 ...
- href 做导航 特效
<div> <div> <%for (int i = 0; i < 200; i++) { %><%=i.ToString() %> <br ...
- Canvas与javaScript特效笔记
第六章 Canvas与javaScript特效笔记 q <canvas>标签的用途 HTML5 canvas 提供了通过 JavaScript 绘制图形的方法,此方法使用简单但功能强 ...
- 用Canvas做动画
之前看过不少HTML5动画的书,讲解的是如何去做,对于其中的数学原理讲解的不详细,常有困惑.最近看的<HTML5+JavaScript 动画基础>这个是译本,Keith Peters曾写过 ...
- canvas之背景特效
需具备js基础知识以及canvas相关方法(可查阅相关文档) 下面是一篇有关js与canvas的背景特效 基于面向过程的思维 <!DOCTYPE html> <html> &l ...
- 我们能用canvas做什么?
什么是Canvas? Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像.Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度.JavaScript代码可以访问该地区,通过 ...
- html5 canvas做的图表插件
用highchart的时候发现它是用svg来画图的,那么用canvas来做怎么样的. 以前做AS图表插件的时候,绘制图画主要用容器的Graphics对象来绘制,而canvas的context和Grap ...
- canvas做动画
一.绘制图片 ①加载图片 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- CANVAS模仿龙卷风特效
大学时候,有一段时间对flash比较感兴趣.去图书馆借了一本很厚很厚的falsh书籍. 翻了几页之后,就再没有往后看过.印象比较深的是作者说他用flash完成了一个龙卷风效果. 一直到现在我也没有看到 ...
随机推荐
- 整合Thinkphp数据库基本操作CURD,界面datagrid采用EasyUi的Demo
1 <?php 2 class CurdAction extends Action{ 3 public function del($id){ 4 ...
- 检测进程不存在自动重启shell脚本
#!/bin/bash WORKDIR="/usr/local/gse/gseagent" [[ -d $WORKDIR ]] && { if ! ps aux|g ...
- EntityFramework(EF) 单表与主从表的使用
一.单表Reader 1 构建Reader类 public class Reader { public int ReaderID { get; set; } publ ...
- Android无线测试之—UiAutomator UiObject API介绍一
UiObject类介绍 一.UiObject类介绍 UiObject代表一个UI元素,通过UiSelector查找跳进创建一个UiObject实例,找到这个实例以后可以对这个实例进行各类操作 二.Ui ...
- SVG 与 Canvas:如何选择
SVG 与 Canvas:如何选择 61(共 69)对本文的评价是有帮助 - 评价此主题 本主题一开始将对 SVG 与 Canvas 进行简要比较,接下来会讨论大量的比较代码示例,如光线跟踪和绿屏 ...
- tomcat ; nginx ;mysql
[说明]上午在服务器上部署了自己的web目录(tomcat虚拟目录),下午安装并了解了nginx(出了点问题,后来解决了),晚上尝试nginx和tomcat配置(一头雾水) 一:今日完成 1)配置to ...
- Oracle 常用
1. 级联查询 在ORACLE 数据库中有一种方法可以实现级联查询select * //要查询的字段from table //具有子接点ID与父 ...
- TestClass必须是public的
运行一个测试类遇到一下问题: namespace TestSample.Sample { [TestClass] class CynthiaTest { [Te ...
- maven实现项目热部署
1.Tomcat的配置 我们需要实现热部署,自然就需要通过maven操作tomcat,所以就需要maven取得操作tomcat的权限,现在这一步就是配置tomcat的可操作权限. 在tomcat的安装 ...
- python系列八:Python3条件控制&循环语句
#!/usr/bin/python #-*-coding:gbk-*-#Python3 条件控制&循环语句import randomage = int(input("请输入你的年龄: ...