当前位置:首页 > VUE

vue实现点击烟花

2026-01-18 01:52:04VUE

Vue 实现点击烟花效果

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

准备工作

确保项目中已安装 Vue,并创建一个 Vue 组件用于实现烟花效果。

创建烟花元素

使用动态生成 DOM 元素的方式创建烟花粒子,每个粒子代表烟花的一个火花。

vue实现点击烟花

<template>
  <div class="fireworks-container" @click="createFirework">
    <!-- 点击区域 -->
  </div>
</template>

<script>
export default {
  methods: {
    createFirework(event) {
      const particleCount = 50;
      for (let i = 0; i < particleCount; i++) {
        this.createParticle(event.clientX, event.clientY);
      }
    },
    createParticle(x, y) {
      const particle = document.createElement('div');
      particle.className = 'particle';
      document.body.appendChild(particle);

      const size = Math.random() * 5 + 2;
      particle.style.width = `${size}px`;
      particle.style.height = `${size}px`;

      const angle = Math.random() * Math.PI * 2;
      const velocity = Math.random() * 5 + 2;
      const xVelocity = Math.cos(angle) * velocity;
      const yVelocity = Math.sin(angle) * velocity;

      particle.style.left = `${x}px`;
      particle.style.top = `${y}px`;

      let posX = x;
      let posY = y;

      const animation = setInterval(() => {
        posX += xVelocity;
        posY += yVelocity + 0.1; // 添加重力效果
        particle.style.left = `${posX}px`;
        particle.style.top = `${posY}px`;

        particle.style.opacity = parseFloat(particle.style.opacity || 1) - 0.02;

        if (parseFloat(particle.style.opacity) <= 0) {
          clearInterval(animation);
          particle.remove();
        }
      }, 20);
    }
  }
}
</script>

添加样式

为烟花粒子添加样式,使其呈现彩色和发光效果。

.particle {
  position: absolute;
  border-radius: 50%;
  background: hsl(
    calc(var(--rand-hue, 0) + (var(--hue-offset, 0) * 1deg)), 
    100%, 
    50%
  );
  pointer-events: none;
  --rand-hue: calc(Math.random() * 360);
  --hue-offset: calc(Math.random() * 60 - 30);
  box-shadow: 0 0 10px 2px currentColor;
  transform: translate(-50%, -50%);
}

优化性能

为避免内存泄漏,需要在组件销毁时清除所有烟花粒子。

vue实现点击烟花

export default {
  data() {
    return {
      particles: []
    }
  },
  methods: {
    createParticle(x, y) {
      const particle = document.createElement('div');
      this.particles.push(particle);
      // ...其余代码
    }
  },
  beforeUnmount() {
    this.particles.forEach(particle => {
      if (particle.parentNode) {
        particle.parentNode.removeChild(particle);
      }
    });
  }
}

使用 Canvas 高性能版本

对于更复杂的烟花效果,可以使用 Canvas 实现。

<template>
  <canvas ref="canvas" @click="createFirework"></canvas>
</template>

<script>
export default {
  mounted() {
    this.canvas = this.$refs.canvas;
    this.ctx = this.canvas.getContext('2d');
    this.resizeCanvas();
    window.addEventListener('resize', this.resizeCanvas);
  },
  methods: {
    resizeCanvas() {
      this.canvas.width = window.innerWidth;
      this.canvas.height = window.innerHeight;
    },
    createFirework(e) {
      // Canvas 实现烟花逻辑
    }
  }
}
</script>

添加音效

为增强体验,可以添加烟花爆炸音效。

methods: {
  playSound() {
    const audio = new Audio('firework.mp3');
    audio.volume = 0.3;
    audio.play();
  },
  createFirework() {
    this.playSound();
    // 烟花逻辑
  }
}

以上方法提供了从简单到复杂的 Vue 点击烟花实现方案,可根据项目需求选择适合的方式。

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

相关文章

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script src…

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…

vue实现layout

vue实现layout

Vue 实现 Layout 布局的方法 在 Vue 中实现 Layout 布局通常涉及路由嵌套、组件化设计和动态渲染。以下是几种常见的实现方式: 使用嵌套路由 通过 Vue Router 的嵌套路由…

vue 实现穿透

vue 实现穿透

Vue 样式穿透的实现方法 在 Vue 中,样式穿透通常指在带有 scoped 属性的样式块中,强制影响子组件的样式。以下是几种常见的实现方式: 使用 >>> 或 /deep/ 选…