当前位置:首页 > 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
分享给朋友:

相关文章

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…