马黑黑 发表于 2023-7-11 07:49

测试Lizi类 : 雨

<style>
#mydiv {
        margin: 20px auto;
        width: 740px;
        height: 500px;
        background: #333;
        overflow: hidden;
        cursor: pointer;
        position: relative;
        --state: running;
}
li-zi {
        position: absolute;
        background: linear-gradient(to bottom, transparent, snow);
        animation: drop var(--dur) var(--delay) infinite linear var(--state);
}
@keyframes drop { to { top: 100%; } }
</style>

<div id="mydiv"></div>

<script>

let canMove = true;

//Lizi 类
class Lizi {
        constructor(pa) {
                this.pa = pa;
                this.size = {x: 20, y: 20};
                this.pos = {x: 10, y: 10};
                this.ele = document.createElement('li-zi');
        };
        //创建粒子
        creating() {
                this.ele.style.cssText = `
                        width: ${this.size.x}px;
                        height: ${this.size.y}px;
                        left: ${this.pos.x}px;
                        top: ${this.pos.y}px;
                `;
                this.pa.appendChild(this.ele);
        };
}

//实例化类
Array.from({length: 200}).forEach((element) => {
        element = new Lizi(mydiv);
        element.size = {
                x: 1 + Math.round(Math.random()),
                y: 8 + Math.random() * 30
        };
        element.pos = {
                x: Math.floor(Math.random() * mydiv.offsetWidth),
                y: 0
        };
        element.creating();
        element.ele.style.setProperty('--dur', 0.4 + Math.random() * 0.4 + 's');
        element.ele.style.setProperty('--delay', Math.random() * -0.8 + 's');
});

mydiv.onclick = () => {
        canMove = !canMove;
        mydiv.style.setProperty('--state', canMove ? 'running' : 'paused');
        console.log(canMove);
}

</script>

马黑黑 发表于 2023-7-11 07:50

代码
<style>
#mydiv {
        margin: 20px auto;
        width: 740px;
        height: 500px;
        background: #333;
        overflow: hidden;
        cursor: pointer;
        position: relative;
        --state: running;
}
li-zi {
        position: absolute;
        background: linear-gradient(to bottom, transparent, snow);
        animation: drop var(--dur) var(--delay) infinite linear var(--state);
}
@keyframes drop { to { top: 100%; } }
</style>

<div id="mydiv"></div>

<script>

let canMove = true;

//Lizi 类
class Lizi {
        constructor(pa) {
                this.pa = pa;
                this.size = {x: 20, y: 20};
                this.pos = {x: 10, y: 10};
                this.ele = document.createElement('li-zi');
        };
        //创建粒子
        creating() {
                this.ele.style.cssText = `
                        width: ${this.size.x}px;
                        height: ${this.size.y}px;
                        left: ${this.pos.x}px;
                        top: ${this.pos.y}px;
                `;
                this.pa.appendChild(this.ele);
        };
}

//实例化类
Array.from({length: 200}).forEach((element) => {
        element = new Lizi(mydiv);
        element.size = {
                x: 1 + Math.round(Math.random()),
                y: 8 + Math.random() * 30
        };
        element.pos = {
                x: Math.floor(Math.random() * mydiv.offsetWidth),
                y: 0
        };
        element.creating();
        element.ele.style.setProperty('--dur', 0.4 + Math.random() * 0.4 + 's');
        element.ele.style.setProperty('--delay', Math.random() * -0.8 + 's');
});

mydiv.onclick = () => {
        canMove = !canMove;
        mydiv.style.setProperty('--state', canMove ? 'running' : 'paused');
        console.log(canMove);
}

</script>

马黑黑 发表于 2023-7-11 07:52

若使用 JS类的方法实现下雨效果,100左右的实例化雨滴还可以,多了很吃系统资源。使用 CSS 关键帧动画替代类的方法,上到300、500的雨滴都没问题。

小文 发表于 2023-7-11 08:37

慢慢体会文中深意,学习……

南无月 发表于 2023-7-11 09:32

及时雨。。
其实就是正方形粒子,
element.size = {
                x: 1 + Math.round(Math.random()),
                y: 8 + Math.random() * 30
在这里控制其的长宽,再通过填入线性渐变从透明到白色形成雨的形状。。
跟气球变雨滴完全不同,真是意想不到。。

南无月 发表于 2023-7-11 09:33

把之前做的那个贴子改成了新的下雨效果,老师有空去瞧一眼{:4_173:}{:4_187:}

红影 发表于 2023-7-11 10:41

element.ele.style.setProperty('--dur', 0.4 + Math.random() * 0.4 + 's');
      element.ele.style.setProperty('--delay', Math.random() * -0.8 + 's');

让雨滴下得这么快和下落分布得这么均匀,第一句里的稍微大点,就下得慢点了吧{:4_173:}

红影 发表于 2023-7-11 10:44

南无月 发表于 2023-7-11 09:32
及时雨。。
其实就是正方形粒子,
element.size = {


这个是长度大宽度小,要是气球雨滴的长宽也这样取值,应该也可以的吧,还能让雨滴更圆润{:4_173:}

樵歌 发表于 2023-7-11 17:03

雨一直下着,我在雨里疯跑着。

醉美水芙蓉 发表于 2023-7-11 17:07

朵拉 发表于 2023-7-11 18:49

樵歌 发表于 2023-7-11 17:03
雨一直下着,我在雨里疯跑着。

樵歌不乖,雨一直下,您疯跑好玩吗{:4_173:}

马黑黑 发表于 2023-7-11 18:53

朵拉 发表于 2023-7-11 18:49
樵歌不乖,雨一直下,您疯跑好玩吗

洗澡的{:4_189:}

马黑黑 发表于 2023-7-11 18:53

小文 发表于 2023-7-11 08:37
慢慢体会文中深意,学习……

没啥深意

马黑黑 发表于 2023-7-11 18:54

醉美水芙蓉 发表于 2023-7-11 17:07
老师厉害!孙悟空七十二变,要什么有什么呢!

老猪36变就够用了{:4_170:}

马黑黑 发表于 2023-7-11 18:54

南无月 发表于 2023-7-11 09:32
及时雨。。
其实就是正方形粒子,
element.size = {


儿童思维就可以了{:4_170:}

马黑黑 发表于 2023-7-11 18:55

南无月 发表于 2023-7-11 09:33
把之前做的那个贴子改成了新的下雨效果,老师有空去瞧一眼

{:4_199:}

朵拉 发表于 2023-7-11 18:55

马黑黑 发表于 2023-7-11 18:53
洗澡的

了解~~{:4_173:}

马黑黑 发表于 2023-7-11 18:55

红影 发表于 2023-7-11 10:41
element.ele.style.setProperty('--dur', 0.4 + Math.random() * 0.4 + 's');
      element.ele.style. ...

理解正确

马黑黑 发表于 2023-7-11 18:56

樵歌 发表于 2023-7-11 17:03
雨一直下着,我在雨里疯跑着。

你牛

马黑黑 发表于 2023-7-11 18:58

朵拉 发表于 2023-7-11 18:55
了解~~

{:4_170:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 测试Lizi类 : 雨