雪花组件(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'
相关推荐
鱼锦0.010 分钟前
在vue2中主页面怎么给子页面传递数据
前端·javascript·html
!win !3 小时前
前端跨标签页通信方案(下)
前端·javascript
f***45324 小时前
基于SpringBoot和PostGIS的各省与地级市空间距离分析
android·前端·后端
编码追梦人4 小时前
从 “手忙脚乱“ 到 “行云流水“:华为云 DevUI 与 MateChat 如何让前端开发飞起来
前端·华为云
用户47949283569155 小时前
TypeScript 简史:它是怎么拯救我的烂代码的
javascript·typescript
S***H2835 小时前
前端动画实现经验,性能优化与兼容性
前端
用户47949283569155 小时前
只有前端 Leader 才会告诉你:那些年踩过的模块加载失败的坑(二)
javascript
xw55 小时前
前端跨标签页通信方案(下)
前端·javascript
zzlyx995 小时前
IoTSharp前端VUE采用npm run build编译提示require() of ES Module 出错
前端·vue.js·npm
全栈技术负责人6 小时前
拒绝“无法复现”:前端全链路日志排查实战手册
前端·全链路·问题排查思路