Javascript下雨效果是一種比較常見的網(wǎng)頁動畫效果,我們在很多網(wǎng)站都可以看到這種效果。
通常情況下,我們會在網(wǎng)頁的頭部或者頁面中隨意添加一個div元素,然后使用Javascript在這個元素中生成小圓點和直線,讓小圓點像雨滴一樣從上往下掉落,每個小圓點都會自動隨機出現(xiàn)在不同的位置,并以不同的速度下落到底部。下面我們一步一步來實現(xiàn)這個功能。
<div id="rain"></div>
<style>
#rain {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background: black;
}
.drop {
position: absolute;
top: -55px;
animation: fall 4s linear infinite;
}
@keyframes fall {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(100%);
}
}
</style>
<script>
const rain = document.querySelector('#rain');
const WIDTH = rain.clientWidth;
const HEIGHT = rain.clientHeight;
function createDrop() {
const drop = document.createElement('div');
drop.classList.add('drop');
drop.style.left = Math.random() * WIDTH + 'px';
drop.style.animationDelay = Math.random() * 2 + 's';
rain.appendChild(drop);
setTimeout(() => {
drop.classList.add('remove');
}, 4000);
}
setInterval(createDrop, 100);
rain.addEventListener('animationiteration', (event) => {
event.target.removeChild(event.target.querySelector('.remove'));
});
</script>
上面的代碼實現(xiàn)了一個簡單的下雨效果。我們首先在頁面中添加了一個id為rain的div元素,在CSS樣式中設置div元素為全屏黑色背景。接下來定義了一個名為drop的class,這個class會被應用到每一個生成的小圓點上。在class中,我們使用animation屬性設置了雨滴下落的時間為4秒,并且設置了無限循環(huán)。
在Javascript代碼中,我們先獲取到了id為rain的div元素和它的寬度和高度。然后創(chuàng)建了一個名為createDrop的函數(shù),在這個函數(shù)中創(chuàng)建了一個div元素,并隨機給它設置了初始的left值和動畫延遲時間。我們需要不斷地執(zhí)行這個函數(shù)來生成新的雨滴。我們使用setInterval定時每隔100毫秒執(zhí)行一次createDrop函數(shù)。當雨滴下落結(jié)束后,我們通過設置setTimeout定時4秒后刪除這個div元素。最后,我們?yōu)閕d為rain的div元素添加了一個animationiteration事件,當一個小圓點下落結(jié)束時,我們需要立即刪除它,以便繼續(xù)生成新的雨滴。
除了這種簡單的下雨效果,我們還可以使用一些特殊效果,比如加入音效,讓下雨更加逼真。我們還可以通過CSS調(diào)整下雨的密度、速度、顏色等參數(shù),讓我們的下雨效果更加靈活。
Javascript下雨效果雖然看起來只是一個簡單的動畫效果,但是它背后的實現(xiàn)原理和代碼細節(jié)是非常復雜的,需要我們在學習和實踐中不斷摸索和嘗試。