雪花组件(vue3)

  • 效果展示
  • 组件代码
js 复制代码
<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';

// 雪花数组
const snowflakes = ref([]);

// 创建雪花
function createSnowflake() {
	const snowflake = {
		style: {
			left: `${Math.random() * 100}%`, // 随机水平位置
			fontSize: `${Math.random() * 20 + 10}px`, // 随机大小(10px - 30px)
			animationDuration: `${Math.random() * 5 + 5}s`, // 随机动画时长(5s - 10s)
			animationDelay: `${Math.random() * 5}s`, // 随机动画延迟(0s - 5s)
		},
	};
	snowflakes.value.push(snowflake);

	// 雪花飘落后移除
	setTimeout(() => {
		snowflakes.value = snowflakes.value.filter((item) => item !== snowflake);
	}, parseFloat(snowflake.style.animationDuration) * 1000);
}

// 定时生成雪花
let interval;
onMounted(() => {
	interval = setInterval(createSnowflake, 100); // 每 100ms 生成一个雪花
});

// 组件卸载时清除定时器
onUnmounted(() => {
	clearInterval(interval);
});
</script>

<style scoped>
.snow-container {
	position: relative;
	width: 100%;
	height: 100vh;
	overflow: hidden;
	background: url(http://mms0.baidu.com/it/u=4004612276,3764837023&fm=253&app=138&f=JPEG?w=889&h=500) no-repeat;
    background-size: 100% 100%;
	/* background: #0a2a43; */
}

.snowflake {
	position: absolute;
	top: -5%;
	color: #fff; /* 雪花颜色 */
	user-select: none; /* 禁止选中 */
	animation: fall linear infinite;
}

@keyframes fall {
	to {
		transform: translateY(100vh); /* 雪花从顶部飘落到底部 */
	}
}
</style>
  • 使用
js 复制代码
<div class="login-container">
       <SnowModule />
</div>
import SnowModule from './component/snow.vue'
相关推荐
wno70411 分钟前
node.js中使用jquery
前端·node.js·jquery
阿琳a_16 分钟前
b-map-viewer:面向 Vue 3 的地图可视化 SDK,从接入到展示再到交互分析
前端·javascript·vue.js·gis·数据可视化·地图
10年前端老司机26 分钟前
Agent 商业化困局:热闹的发布会,冷清的付费客户
前端·后端·agent
钱栈up33 分钟前
热榜上手|HyperFrames:写HTML出MP4
前端·html
Sailing44 分钟前
🚀🚀【封闭结束8】Agent RAG:从零搭建一个可用知识库
前端·后端·agent
Captain1314_李祖团1 小时前
5. MLIR相关语法
java·前端·javascript
齐 飞1 小时前
VUE2常用语法总结
javascript·vue.js
恋猫de小郭1 小时前
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
android·前端·flutter
Data analyse4561 小时前
web-vitals库接入:LCP、INP、CLS上报与阈值
前端·javascript·数据分析
北城笑笑1 小时前
Vue 106 ,上篇:前端桌面端应用实现方案( Electron 框架详细介绍,Vue + Electron )
前端·javascript·vue.js·python·electron