基于Vue3实现一个简单的雪花漂浮效果

 更新时间:2025年01月27日 08:10:48   作者:江城开朗的豌豆  
随着冬季的到来,许多网站和应用程序都会添加一些节日氛围的元素,比如雪花飘落的效果,本文将教你如何在 Vue 3 中实现一个简单的雪花漂浮效果,为你的网页增添一丝冬日的浪漫,感兴趣的小伙伴跟着小编一起来看看吧

效果预览

在开始之前,我们先来看一下最终效果:

  • 雪花从页面顶部随机位置飘落到底部。
  • 雪花的大小、速度和起始位置都是随机的。
  • 页面背景色为透明色,雪花为白色,整体效果非常美观。

实现思路

我们将使用 Vue 3 的 Composition API 动态生成雪花,并结合 CSS 实现动画效果。具体步骤如下:

  • 创建雪花容器:使用 HTML 和 CSS 设置雪花的样式和动画。
  • 动态生成雪花:使用 JavaScript 动态生成雪花,并随机设置它们的大小、位置和动画延迟。
  • 在 Vue 3 中集成:将上述逻辑封装成一个 Vue 组件,方便在项目中复用。

实现步骤

1. 创建 Vue 3 项目

如果你还没有 Vue 3 项目,可以通过以下命令创建一个:

npm init vue@latest

然后按照提示完成项目初始化。

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';

// 雪花数组
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: #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 />
    <!-- 其他内容 -->
  </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>

代码说明

  • 模板部分

    • 使用 v-for 动态渲染雪花元素。
    • 每个雪花的样式通过 :style 动态绑定。
  • 逻辑部分

    • 使用 ref 创建 snowflakes 数组,用于存储所有雪花的数据。
    • createSnowflake 函数用于生成雪花,并随机设置其位置、大小、动画时长和延迟。
    • 使用 setTimeout 在雪花动画结束后移除雪花。
    • 在 onMounted 生命周期钩子中启动定时器,每隔 100ms 生成一个雪花。
    • 在 onUnmounted 生命周期钩子中清除定时器,避免内存泄漏。
  • 样式部分

    • .snow-container 是雪花容器,设置了背景色和高度。
    • .snowflake 是雪花的样式,使用 position: absolute 定位。
    • @keyframes fall 定义了雪花从顶部飘落到底部的动画。

扩展

  • 使用图片代替雪花符号:如果需要更复杂的雪花效果,可以使用图片代替  符号。
  • 调整雪花密度:可以通过调整 setInterval 的时间间隔,控制雪花的密度。
  • 添加更多动画效果:比如雪花旋转或左右飘动,可以通过修改 CSS 动画实现。

结语

通过本文的介绍,你已经学会了如何在 Vue 3 中实现一个简单的雪花漂浮效果。希望这个效果能为你的网页增添一丝冬日的浪漫氛围。

到此这篇关于基于Vue3实现一个简单的雪花漂浮效果的文章就介绍到这了,更多相关Vue3雪花漂浮内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue如何监听页面的滚动的开始和结束

    vue如何监听页面的滚动的开始和结束

    这篇文章主要介绍了vue如何监听页面的滚动的开始和结束,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vux-scroller实现移动端上拉加载功能过程解析

    vux-scroller实现移动端上拉加载功能过程解析

    这篇文章主要介绍了vux-scroller实现移动端上拉加载功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • el-date-picker日期时间选择器的选择时间限制到分钟级别

    el-date-picker日期时间选择器的选择时间限制到分钟级别

    文章介绍了如何使用el-date-picker 组件来限制用户选择的时间,禁止选择当前时间的日期及时分,同时允许选择其他日期的全天时分,通过设置 `pickerOptions` 对象的属性,可以实现对日期和时间的精确控制,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)

    vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)

    下面小编就为大家分享一篇vue.js分页中单击页码更换页面内容的方法(配合spring springmvc),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • 在vue中高德地图引入和轨迹的绘制的实现

    在vue中高德地图引入和轨迹的绘制的实现

    这篇文章主要介绍了在vue中高德地图引入和轨迹的绘制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • vue前端如何接收后端传过来的带list集合的数据

    vue前端如何接收后端传过来的带list集合的数据

    这篇文章主要介绍了vue前端如何接收后端传过来的带list集合的数据,前后端交互,文中的示例Json报文,前端采用vue进行接收,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-02-02
  • Vue 两个字段联合校验之修改密码功能的实现

    Vue 两个字段联合校验之修改密码功能的实现

    本文以校验两次密码的一致性应用,给出两个可变属性值的字段之间的联合校验的典型解决方案,通过实例代码给大家介绍Vue 两个字段联合校验之修改密码功能的实现,需要的朋友一起看看吧
    2021-07-07
  • Vue项目中跨域问题解决方案

    Vue项目中跨域问题解决方案

    本文给大家介绍了vue项目中跨域问题的完美解决方案,通过更改header,使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建),具体内容详情大家跟随脚本之家小编一起学习吧
    2018-06-06
  • vue的Element组件上传文件el-upload上传成功后清空方式

    vue的Element组件上传文件el-upload上传成功后清空方式

    文章介绍了几种清空文件上传组件的方法,包括设置file-list为空数组和修改组件key,这些方法可以帮助在新增或修改时清空组件内容,解决实际开发中的问题
    2026-02-02
  • Vue数据变化后页面更新详细介绍

    Vue数据变化后页面更新详细介绍

    这篇文章主要介绍了Vue在数据发生变化后是如何更新页面的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10

最新评论