canvas入门级基本用法实现雨滴下落特效

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>

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

原文地址:https://www.cnblogs.com/J1019/p/11389398.html

时间: 2024-11-13 10:16:08

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

canvas的常见用法

Canvas canvas是一种抽象概念,是2D图形系统中的重要部分,canvas一系列函数最终都是android 2D图形库Skia的一些列封装,对应在SKCanvas.cpp.canvas在系统中的位置如下图所示 可以将canvas看成一个透明的图层,使用canvas之后会产生一个透明图层,然后在这个新图层上画图,画完之后覆盖在屏幕上显示,叠加. 比较经典的例子就是 ` protected void onDraw(Canvas canvas) { super.onDraw(canvas);

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

这是一款效果非常炫酷华丽的HTML5 canvas带棱镜效果的幻灯片特效.这个特效在每一个幻灯片的前面放置一个图形,并将图形制作为三棱镜效果,它底下的幻灯片图片会被"折射"到棱镜上面,形成一种棱镜折射效果. 所有的现代浏览器都支持这个幻灯片特效,包括IE9. 效果演示:http://www.htmleaf.com/Demo/201504011607.html 下载地址:http://www.htmleaf.com/html5/html5-canvas/201504011606.html

HTML5 canvas超简单和逼真的下雪特效

WebSnowjq.js是一款基于HTML5 canvas的超简单和逼真的下雪场景特效js插件.该下雪特效插件可以通过简单的参数设置了设定雪花的数量.每朵雪花的飘落速度各不相同,层次感非常强. 该下雪特效可以在所有支持HTML5特性的现代浏览器中最常工作: Internet Explorer 9.0+, Google Chrome 4.0+, Mozilla Firefox 2.0+, Safari 3.1+ . 效果演示:http://www.htmleaf.com/Demo/20150406

html5 canvas基本用法

通过对canvas的初步了解,经过几天的总结,吧canvas的基本用法总结如下:方便以后查阅 <!doctype html> <html> <head> <meta charset="utf-8"> <title>canvas 使用实例</title> </head> <body style="padding:0; margin:0;" onLoad="draw()&

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

效果图 1.做出canvas画布和声明一个用来存储雨滴的数组 var c=document.getElementById('myCanvas'); var ctx= c.getContext('2d'); var ary=[]; 2.将雨滴的位置.大小得到 var x=Math.random()*1000;//在画布内随机生成雨滴x轴位置 var width=Math.random()*3;//随机生成雨滴宽度 var h=Math.random()*50+10;//随机生成雨滴长度 var y

Canvas制作的下雨动画

简介 在codepen上看到一个Canvas做的下雨效果动画,感觉蛮有意思的.就研究了下,这里来分享下,实现技巧.效果可以见下面的链接. 霓虹雨: http://codepen.io/natewiley/full/NNgqVJ/ 效果截图: Canvas动画基础 大家都知道,Canvas其实只是一个画板.我们可以应用canvas的api在上面绘制各种图形.Canvas 2D 的API:https://developer.mozilla.org/en-US/docs/Web/API/CanvasR

Blend4精选案例图解教程(二):找张图片玩特效

原文:Blend4精选案例图解教程(二):找张图片玩特效 Blend中的特效给了我们在处理资源时更多的想象空间,合理地运用特效往往会得到梦幻般效果,本次教程展示对图片应用特效的常规操作,当然特效不仅限于使用在图片上,还也可以应用到动画和视频中. OK,开始本次旅程 1. 在项目中添加一张现有的图片 如果添加的图片大于250KB,会提示推荐把图片嵌入到XAP包中,这样图片在浏览器加载XAP文件时会一起被下载到本地. 2.把图片拖到UserControl中 3.在资源面板中,选择特效(Effect)

Canvas基础讲义

今天先花点简单的篇幅和大家介绍下canvas. 1. 基本篇 1.1. 什么是 Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提出的一个方案, 今天已经在大多数浏览器中实现. canvas 英 ['kænv?s] 美 ['kænv?s] 帆布 画布 1.1.1. canvas 的基本用法 基本语法 <canvas></canvas> 使用 canva

canvas画图——初级篇

         canvas画图之初级篇 小女子准备将canvas画图分为初级篇,中级篇和高级篇来介绍,读者们不要着急哦. 初级篇 一.首先什么是canvas呢? canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆 布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提出的一个方案, 今天已经在大多数浏览器中实现. canvas 英 ['kænv?s]  美 ['kænv?s]   帆布 画布 二.让我们先来了解下canvas的基