当前位置:首页 > VUE

vue实现烟花

2026-01-08 02:59:34VUE

Vue 实现烟花效果

在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法:

vue实现烟花

动态生成烟花元素

通过 Vue 的 v-for 动态生成烟花粒子,每个粒子代表烟花的一个火花。在模板中添加一个容器用于放置烟花:

vue实现烟花

<template>
  <div class="fireworks-container" @click="createFirework">
    <div 
      v-for="(particle, index) in particles" 
      :key="index"
      class="particle"
      :style="{
        left: particle.x + 'px',
        top: particle.y + 'px',
        backgroundColor: particle.color,
        transform: `scale(${particle.size})`
      }"
    ></div>
  </div>
</template>

烟花粒子数据与动画

在 Vue 的 data 中定义粒子数组,并通过方法生成随机粒子属性:

data() {
  return {
    particles: []
  }
},
methods: {
  createFirework(event) {
    const colors = ['#ff0000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff00ff'];
    const particleCount = 100;

    for (let i = 0; i < particleCount; i++) {
      const angle = Math.random() * Math.PI * 2;
      const speed = Math.random() * 5 + 2;
      const size = Math.random() * 0.5 + 0.5;

      this.particles.push({
        x: event.clientX,
        y: event.clientY,
        color: colors[Math.floor(Math.random() * colors.length)],
        size,
        vx: Math.cos(angle) * speed,
        vy: Math.sin(angle) * speed
      });
    }

    this.animateParticles();
  },
  animateParticles() {
    const animation = setInterval(() => {
      this.particles.forEach(particle => {
        particle.x += particle.vx;
        particle.y += particle.vy;
        particle.vy += 0.1; // 重力效果
        particle.size *= 0.99; // 粒子逐渐缩小
      });

      this.particles = this.particles.filter(p => p.size > 0.1);

      if (this.particles.length === 0) {
        clearInterval(animation);
      }
    }, 30);
  }
}

CSS 样式

为烟花粒子添加基础样式和动画效果:

.fireworks-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

.particle {
  position: absolute;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  pointer-events: none;
  transition: transform 0.1s ease-out;
}

优化与扩展

  • 添加 requestAnimationFrame 替代 setInterval 以获得更流畅的动画性能。
  • 引入随机延迟和不同的粒子形状(如线条或星星)以增强视觉效果。
  • 通过 Vue 的 transition-group 实现粒子消失的渐隐效果。

完整示例可通过点击页面触发烟花爆炸,粒子会受重力影响下坠并逐渐消失。可根据需要调整粒子数量、颜色和运动参数以实现不同风格的烟花效果。

标签: 烟花vue
分享给朋友:

相关文章

vue实现评论编辑

vue实现评论编辑

Vue 实现评论编辑功能 数据绑定与表单结构 使用 v-model 双向绑定评论内容到表单输入框,确保编辑时能显示原内容并同步修改。示例模板结构: <template> <di…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…