canvas基础知识点参考各种文档,直接上代码,有非常详细注释

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>canvas雨滴特效</title>
<style>
body{
margin: 0;
overflow: hidden;
}
#rain{
display: block;
background-color: #000;
}
</style>
</head>
<body>
<canvas id="rain"></canvas> <script>
//获取canvas元素
const canvas = document.querySelector('#rain');
//设置canvas元素宽高的函数
var wX,wY;
~~function setSize(){
//监控窗口发生变化时自动调用setSize函数
window.onresize = arguments.callee;
//获取浏览器窗口宽高
wX = window.innerWidth;
wY = window.innerHeight;
//给canvas设置宽高
canvas.width = wX;
canvas.height = wY;
}();
//获取绘制区域(相当于画笔,可在canvas中任意位置绘制图形)
var ctx = canvas.getContext('2d'); //随机产生两个数之间随机数
function random(min,max){
return Math.random()*(max-min) + min;
}
//生成雨滴的构造函数
function Rain(){};
//添加原型方法
Rain.prototype = {
init : function(){
this.x = random(0,wX);//雨滴横坐标
this.y = 0;//雨滴纵坐标默认从最上方下落
this.v = random(3,4);//雨滴每秒下落的速度
this.h = random(0.9*wY,wY);//下落到窗口高度的90%~100%
this.r = 1;//雨滴绽放的初始半径
this.vr = 0.4;//半径扩大的速度
},
draw : function(){
if(this.y<this.h){//判断是否在90%~100%之间
ctx.beginPath(); //抬笔作画
ctx.fillStyle = '#666'; //内容实心用颜色填充
ctx.fillRect(this.x,this.y,4,8); //画矩形小雨滴
}else{//不在区间则以下落到地绽放成圆
ctx.beginPath();
ctx.strokeStyle = '#666';
ctx.arc(this.x,this.y,this.r,0,Math.PI*2);
ctx.stroke();
}
},
move : function(){
if(this.y<this.h){//下落
this.y+=this.v;//每秒下落3~4滴的距离
}else{//绽放成圆
if(this.r<35){
this.r+=this.vr;
}else{
this.init();
}
}
this.draw();//移动的雨滴画出来
}
} //生成的雨滴要添加动画为方便找到存在数组中
var aRain = [];
//创造雨滴函数
function createRain(num){
for(var i=0;i<num;i++){
setTimeout(function(){//每隔200毫秒生成一个
var rain = new Rain();
rain.init();
rain.draw();
aRain.push(rain);
},200*i)
}
}
createRain(50); //用定时器画帧形成动画
setInterval(function(){
// ctx.clearRect(0,0,wX,wY);//擦除上一个图形(下雪的感觉)
// 这里不是擦除雨滴效果是加蒙版达到渐变效果
ctx.fillStyle = 'rgba(0,0,0,0.05)';
ctx.fillRect(0,0,wX,wY);
for(var item of aRain){
item.move();
}
},1000/144);//根据自己屏幕刷新频率设置(此处是144HZ) </script>
</body>
</html>

内容本人原创,有不足之处请见谅!欢迎指正!转载请注明出处附上链接,谢谢!

canvas入门级基本用法实现雨滴下落特效的更多相关文章

  1. jq模仿雨滴下落的动画

    效果如图: 实现思路:定时器每隔x秒生成宽高.下落速度(即动画执行时间).left随机的div. 1.CSS: body{ overflow: hidden;/*这是为了防止出现滚动条*/ } .co ...

  2. canvas的常见用法

    Canvas canvas是一种抽象概念,是2D图形系统中的重要部分,canvas一系列函数最终都是android 2D图形库Skia的一些列封装,对应在SKCanvas.cpp.canvas在系统中 ...

  3. android Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  4. Javascript高级编程学习笔记(84)—— Canvas(1)基本用法

    Canvas绘图 Canvas自HTML5引入后,由于其炫酷的效果成为HTML5新增功能中最受欢迎的部分 Canvas元素通过在页面中设定一个区域,然后就可以使用JS在其中绘制图形 <canva ...

  5. Android为TV端助力 Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  6. HTML5 canvas炫酷棱镜效果的幻灯片特效

    这是一款效果很炫酷华丽的HTML5 canvas带棱镜效果的幻灯片特效. 这个特效在每个幻灯片的前面放置一个图形.并将图形制作为三棱镜效果.它底下的幻灯片图片会被"折射"到棱镜上面 ...

  7. [译]Canvas的基本用法

    在本文章中 <canvas> 元素 替换内容 </canvas> 标签不可省 渲染上下文(The rendering context如何翻译) 检查支持性 一个模板骨架 一个简 ...

  8. Paint与Canvas的简单用法

    参考:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=278237 自定义View 重写onDraw方法 package com. ...

  9. Canvas的基本用法

    canvas没有设置宽度和高度的时候,会初始化宽度:300像素和高度:150像素.可以使用CSS来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果CSS的尺寸与初始画布的比例不一致,它会出现扭曲 ...

随机推荐

  1. JS 截取地址栏指定字符后的内容

    一.获取地址栏路径 var url = window.location.href; 二.截取指定字符后的内容 /** * 截取指定字符后的内容 * @param url 路径 * @param par ...

  2. 原生JS实现简单富文本编辑器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 路由器配置——基于链路的OSPF的MD5口令认证

    一.实验目的:掌握基于链路的OSPFMD5口令认证 二.拓扑图: 三.具体步骤配置: (1)R1路由器的配置 Router>enable Router#configure terminal En ...

  4. C/C++语言之由数字26引起的文件的数据保存与读取调试。

    首先在VS2010中遇到的问题是,建立了一个结构体 struct position{ int x; int y; }: 然后用此结构体声明一个数组rout[8]; for(int i=0;i<8 ...

  5. 【概率论】3-7:多变量分布(Multivariate Distributions Part I)

    title: [概率论]3-7:多变量分布(Multivariate Distributions Part I) categories: Mathematic Probability keywords ...

  6. 普转提——有趣的数,欢乐ABC,打游戏

    有趣的数——构造符合条件的数 给你一个区间,问有多少个数符合每一位中,只有一个数字和其他数字不同,也就是其他数字都相同,有且只有一个异类: 数据范围是1e16: 因为只考虑数量而不用管大小: 只要0到 ...

  7. global 和 nonlocal关键字

    当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. def fun(): global num1 num1=2 print("函数内修改后num1=&qu ...

  8. elasticsearch _all

    在轻量搜索中,我们介绍了 _all 字段:一个把其它字段值 当作一个大字符串来索引的特殊字段. query_string 查询子句(搜索 ?q=john )在没有指定字段时默认使用 _all 字段._ ...

  9. 通过Nginx部署flask项目

    用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...

  10. Apache Flink - 基本API概念

    Flink程序是实现分布式集合转换的常规程序.集合最初是从源创建的.通过接收器(slink)返回结果,接收器可以将数据写到某个文件或stdout.Flink可以在各种环境(context)中运行,本地 ...