Do you have any seniors to help simulate the rain effect of Baidu Weather search page with canvas? thank you very much.

canvas simulates the rain effect of Baidu weather search page


rain.png
rain.png transparent

Jan.03,2022

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            *{margin: 0;padding: 0;}
            canvas{background: -sharpfff;}
        </style>
    </head>
    <body>
        <canvas id="canvas" width="500" height="800" ></canvas>
        <script>
            var can = document.getElementById("canvas");
            //
            var cxt = 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;
            };
            //
            cxt.fillStyle = "aqua";
            
            var drops = [];
            // 
            function Drop() {}
            //
            Drop.prototype = {
                init: function() { // 
                    this.x = random(0, w);//
                    this.y = 0;//y
                    this.vy = random(4, 5); //
                    this.l = random(0.8 * h, 0.9 * h);
                    this.r = 1; //
                    this.vr = 1; //
                    //
                    this.a = 1; // =>0
                    this.va = 0.96; //
                },
                draw: function() { //
                    if (this.y > this.l) { // 
                        cxt.beginPath(); //
                        cxt.arc(this.x, this.y, this.r/4, 0, Math.PI * 2, false);
                        cxt.strokeStyle = "rgba(219,227,226," + this.a + ")";
                        cxt.stroke();
                    } else { //
                        cxt.fillStyle = "rgb(219,227,226)";
                        cxt.fillRect(this.x, this.y, 1, 10);
                    }
                    this.update();
                },
                update: function() { //
                    if (this.y < this.l) {
                        this.y += this.vy
                    } else { // 
                        if (this.a > 0.03) {
                            this.r += this.vr;
                            if (this.r > 50) {
                                this.a *= this.va;
                            }
                        } else {
                            //
                            this.init()
                        }
                    }
                }
            };
            for (var i = 0; i < 50; iPP) {
                setTimeout(function() {
                    var drop = new Drop();
                    drop.init();
                    drops.push(drop);
                }, i * 300)
            }
            function move() {
                //  
                // 
                cxt.fillStyle = "rgba(15,15,15,0.1)";
                cxt.fillRect(0, 0, w, h);
                for (var k = 0; k < drops.length; kPP) {
                    drops[k].draw();
                }
                requestAnimationFrame(move);
            }
            move();
            //
            function random(min, max) {
                return Math.random() * (max - min) + min; //min - max
            }
        </script>
    </body>
</html>

https://blog.csdn.net/zhuogan.


not a single high number

Menu