• 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>

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

  • 相关阅读:
    毕业五年后的差距
    基于jsonlib.jar包Json程序 实战篇
    Hashtable
    [转]浏览器是怎样工作的:渲染引擎,HTML解析
    Web.config之连接字介绍
    jQuery选择器全解【转】
    JavaScript document属性和方法
    zoj 2316 Matrix Multiplication 夜
    zoj 2318 Get Out! 夜
    hdu 3666 THE MATRIX PROBLEM 夜
  • 原文地址:https://www.cnblogs.com/J1019/p/11389398.html
Copyright © 2020-2023  润新知