基于Vue3實(shí)現(xiàn)一個(gè)簡(jiǎn)單的雪花漂浮效果
效果預(yù)覽
在開始之前,我們先來(lái)看一下最終效果:

- 雪花從頁(yè)面頂部隨機(jī)位置飄落到底部。
- 雪花的大小、速度和起始位置都是隨機(jī)的。
- 頁(yè)面背景色為透明色,雪花為白色,整體效果非常美觀。
實(shí)現(xiàn)思路
我們將使用 Vue 3 的 Composition API 動(dòng)態(tài)生成雪花,并結(jié)合 CSS 實(shí)現(xiàn)動(dòng)畫效果。具體步驟如下:
- 創(chuàng)建雪花容器:使用
HTML 和 CSS設(shè)置雪花的樣式和動(dòng)畫。 - 動(dòng)態(tài)生成雪花:使用
JavaScript動(dòng)態(tài)生成雪花,并隨機(jī)設(shè)置它們的大小、位置和動(dòng)畫延遲。 - 在 Vue 3 中集成:將上述邏輯封裝成一個(gè)
Vue 組件,方便在項(xiàng)目中復(fù)用。
實(shí)現(xiàn)步驟
1. 創(chuàng)建 Vue 3 項(xiàng)目
如果你還沒(méi)有 Vue 3 項(xiàng)目,可以通過(guò)以下命令創(chuàng)建一個(gè):
npm init vue@latest
然后按照提示完成項(xiàng)目初始化。
2. 編寫雪花組件
在你的 Vue 組件中(例如 Snowflake.vue),編寫以下代碼:
<template>
<div class="snow-container">
<!-- 雪花元素 -->
<div
v-for="(snowflake, index) in snowflakes"
:key="index"
:style="snowflake.style"
class="snowflake"
>
?
</div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
// 雪花數(shù)組
const snowflakes = ref([]);
// 創(chuàng)建雪花
function createSnowflake() {
const snowflake = {
style: {
left: `${Math.random() * 100}%`, // 隨機(jī)水平位置
fontSize: `${Math.random() * 20 + 10}px`, // 隨機(jī)大小(10px - 30px)
animationDuration: `${Math.random() * 5 + 5}s`, // 隨機(jī)動(dòng)畫時(shí)長(zhǎng)(5s - 10s)
animationDelay: `${Math.random() * 5}s`, // 隨機(jī)動(dòng)畫延遲(0s - 5s)
},
};
snowflakes.value.push(snowflake);
// 雪花飄落后移除
setTimeout(() => {
snowflakes.value = snowflakes.value.filter((item) => item !== snowflake);
}, parseFloat(snowflake.style.animationDuration) * 1000);
}
// 定時(shí)生成雪花
let interval;
onMounted(() => {
interval = setInterval(createSnowflake, 100); // 每 100ms 生成一個(gè)雪花
});
// 組件卸載時(shí)清除定時(shí)器
onUnmounted(() => {
clearInterval(interval);
});
</script>
<style scoped>
.snow-container {
position: relative;
width: 100%;
height: 100vh;
overflow: hidden;
background: #0a2a43; /* 背景色 */
}
.snowflake {
position: absolute;
top: -10%;
color: #fff; /* 雪花顏色 */
user-select: none; /* 禁止選中 */
animation: fall linear infinite;
}
@keyframes fall {
to {
transform: translateY(100vh); /* 雪花從頂部飄落到底部 */
}
}
</style>
3. 在主組件中使用雪花組件
在你的主組件(例如 App.vue)中使用 Snowflake.vue 組件:
<template>
<div id="app">
<Snowflake />
<!-- 其他內(nèi)容 -->
</div>
</template>
<script setup>
import Snowflake from './components/Snowflake.vue';
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
text-align: center;
color: #2c3e50;
}
</style>
代碼說(shuō)明
模板部分:
- 使用
v-for動(dòng)態(tài)渲染雪花元素。 - 每個(gè)雪花的樣式通過(guò)
:style動(dòng)態(tài)綁定。
- 使用
邏輯部分:
- 使用
ref創(chuàng)建snowflakes數(shù)組,用于存儲(chǔ)所有雪花的數(shù)據(jù)。 createSnowflake函數(shù)用于生成雪花,并隨機(jī)設(shè)置其位置、大小、動(dòng)畫時(shí)長(zhǎng)和延遲。- 使用
setTimeout在雪花動(dòng)畫結(jié)束后移除雪花。 - 在
onMounted生命周期鉤子中啟動(dòng)定時(shí)器,每隔 100ms 生成一個(gè)雪花。 - 在
onUnmounted生命周期鉤子中清除定時(shí)器,避免內(nèi)存泄漏。
- 使用
樣式部分:
.snow-container是雪花容器,設(shè)置了背景色和高度。.snowflake是雪花的樣式,使用position: absolute定位。@keyframes fall定義了雪花從頂部飄落到底部的動(dòng)畫。
擴(kuò)展
- 使用圖片代替雪花符號(hào):如果需要更復(fù)雜的雪花效果,可以使用圖片代替
?符號(hào)。 - 調(diào)整雪花密度:可以通過(guò)調(diào)整
setInterval的時(shí)間間隔,控制雪花的密度。 - 添加更多動(dòng)畫效果:比如雪花旋轉(zhuǎn)或左右飄動(dòng),可以通過(guò)修改 CSS 動(dòng)畫實(shí)現(xiàn)。
結(jié)語(yǔ)
通過(guò)本文的介紹,你已經(jīng)學(xué)會(huì)了如何在 Vue 3 中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的雪花漂浮效果。希望這個(gè)效果能為你的網(wǎng)頁(yè)增添一絲冬日的浪漫氛圍。
到此這篇關(guān)于基于Vue3實(shí)現(xiàn)一個(gè)簡(jiǎn)單的雪花漂浮效果的文章就介紹到這了,更多相關(guān)Vue3雪花漂浮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue如何監(jiān)聽頁(yè)面的滾動(dòng)的開始和結(jié)束
這篇文章主要介紹了vue如何監(jiān)聽頁(yè)面的滾動(dòng)的開始和結(jié)束,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過(guò)程解析
這篇文章主要介紹了vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
el-date-picker日期時(shí)間選擇器的選擇時(shí)間限制到分鐘級(jí)別
文章介紹了如何使用el-date-picker 組件來(lái)限制用戶選擇的時(shí)間,禁止選擇當(dāng)前時(shí)間的日期及時(shí)分,同時(shí)允許選擇其他日期的全天時(shí)分,通過(guò)設(shè)置 `pickerOptions` 對(duì)象的屬性,可以實(shí)現(xiàn)對(duì)日期和時(shí)間的精確控制,感興趣的朋友跟隨小編一起看看吧2025-01-01
vue.js分頁(yè)中單擊頁(yè)碼更換頁(yè)面內(nèi)容的方法(配合spring springmvc)
下面小編就為大家分享一篇vue.js分頁(yè)中單擊頁(yè)碼更換頁(yè)面內(nèi)容的方法(配合spring springmvc),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
在vue中高德地圖引入和軌跡的繪制的實(shí)現(xiàn)
這篇文章主要介紹了在vue中高德地圖引入和軌跡的繪制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue前端如何接收后端傳過(guò)來(lái)的帶list集合的數(shù)據(jù)
這篇文章主要介紹了vue前端如何接收后端傳過(guò)來(lái)的帶list集合的數(shù)據(jù),前后端交互,文中的示例Json報(bào)文,前端采用vue進(jìn)行接收,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-02-02
Vue 兩個(gè)字段聯(lián)合校驗(yàn)之修改密碼功能的實(shí)現(xiàn)
本文以校驗(yàn)兩次密碼的一致性應(yīng)用,給出兩個(gè)可變屬性值的字段之間的聯(lián)合校驗(yàn)的典型解決方案,通過(guò)實(shí)例代碼給大家介紹Vue 兩個(gè)字段聯(lián)合校驗(yàn)之修改密碼功能的實(shí)現(xiàn),需要的朋友一起看看吧2021-07-07
vue的Element組件上傳文件el-upload上傳成功后清空方式
文章介紹了幾種清空文件上傳組件的方法,包括設(shè)置file-list為空數(shù)組和修改組件key,這些方法可以幫助在新增或修改時(shí)清空組件內(nèi)容,解決實(shí)際開發(fā)中的問(wèn)題2026-02-02
Vue數(shù)據(jù)變化后頁(yè)面更新詳細(xì)介紹
這篇文章主要介紹了Vue在數(shù)據(jù)發(fā)生變化后是如何更新頁(yè)面的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10

