js實(shí)現(xiàn)雪花效果

分享一個(gè)用js實(shí)現(xiàn)的簡單的雪花效果,效果如下:

雪花效果

簡單說明下,這里的雪花圖標(biāo)來自于iconfont阿里云矢量圖標(biāo)庫,如何使用可以查看我之前發(fā)布的文章《vue項(xiàng)目如何引用阿里云矢量圖標(biāo)庫》,用法都一樣的;話不多說,直接開干。

HTML代碼

<div class="content">
    <div class="form-wrapper">
        <button class="form" onclick="handleClear()">清除</button>
        <button class="form" onclick="handleSnow()">小雪</button>
        <button class="form" onclick="handleSnow(5, 10, 16, 300)">中雪</button>
        <button class="form" onclick="handleSnow(6, 10, 14, 400)">暴雪</button>
    </div>
    <div class="wrapper" id="wrapper"></div>
</div>

css代碼

*{
    padding: 0;
    margin: 0;
}
.content{
    width: 100%;
    height: 100vh;
    position: relative;
    background: url("static/bg.jpg") no-repeat;
}
.form-wrapper{
    height: 80px;
    top: 20px;
    left: 20px;
    position: absolute;
    z-index: 1;
}
.form{
    width: 150px;
    font-size: 18px;
    font-weight: bold;
    color: #fff;
    background: transparent;
    cursor: pointer;
    line-height: 40px;
    border: 2px solid #fff;
    margin: 0 5px;
}
.form:hover{
    background-color: rgba(255,255,255, .2);
}
.wrapper{
    height: 100%;
    width: 100%;
    position: relative;
    background-repeat: no-repeat;
    overflow: hidden;
}
.icon-xuehua{
    color: #fff;
    position: absolute;
}

js代碼

const SNOW_NUM = 200;
const [MIN_SIZE, RANGE] = [16, 20];
const WIDTH = document.documentElement.clientWidth;
const HEIGHT = document.documentElement.clientHeight;
const wrapper = document.getElementById("wrapper");
const getRandom = (min = 16, range = 20) => Math.round(Math.random() * range + min);
function handleClear() {
    wrapper.innerHTML = "";
}
function createSnow(step, min, range) {
    const ele = document.createElement("span");
    let [left, top] = [getRandom(0, WIDTH - (MIN_SIZE + RANGE)), getRandom(0, HEIGHT - (MIN_SIZE + RANGE))]
    ele.className = "iconfont icon-xuehua";
    ele.style.fontSize = `${getRandom(MIN_SIZE, RANGE)}px`;
    ele.style.left = `${left}px`
    ele.style.top = `${top}px`
    wrapper.appendChild(ele)
    setInterval(() => {
        if (top >= HEIGHT - (MIN_SIZE + RANGE)) {
            top = 0;
        }
        top = top + step;
        ele.style.top = `${top}px`
    }, getRandom(min, range))
}
function handleSnow(step = 4, min = 10, range = 20,num = SNOW_NUM) {
    handleClear();
    for(let i = 0; i < num; i ++) {
        createSnow(step, min, range);
    }
}
handleSnow();

基本原理就是通過定位,讓元素隨機(jī)定位到瀏覽器窗口中,利用定時(shí)器定時(shí)改變元素的top值,然后再對元素進(jìn)行邊界判斷。

好了今天就分享到這里了,本人技術(shù)小白,希望對同樣是技術(shù)小白的你有所幫助!?。?!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。系列教程:Android開發(fā)之從零開始系列源碼:github....
    Anlia閱讀 7,298評論 8 47
  • 項(xiàng)目介紹一、pc端靜態(tài)頁面制作1.小米官網(wǎng)靜態(tài)頁面制作2.博雅互動(dòng)靜態(tài)頁面制作二、基礎(chǔ)實(shí)例項(xiàng)目1.花瓣網(wǎng)實(shí)例1)思...
    果木山閱讀 659評論 0 0
  • # css: > 1. 學(xué)會(huì)使用CSS選擇器 > 2. 熟記CSS樣式和外觀屬性 > 3. 熟練掌握CSS各種選擇...
    欣簡書閱讀 175評論 0 0
  • 學(xué)會(huì)使用CSS選擇器熟記CSS樣式和外觀屬性熟練掌握CSS各種選擇器熟練掌握CSS各種選擇器熟練掌握CSS三種顯示...
    七彩小鹿閱讀 6,445評論 2 66
  • # CSS樣式規(guī)則overflow 使用HTML時(shí),需要遵從一定的規(guī)范。CSS亦如此,要想熟練地使用CSS對網(wǎng)頁進(jìn)...
    低調(diào)迷人的反派角色閱讀 1,082評論 0 1

友情鏈接更多精彩內(nèi)容