当前位置:首页 > VUE

vue实现红包上下

2026-01-22 23:26:49VUE

Vue 实现红包上下飘动动画

使用 CSS 动画结合 Vue 动态样式

在 Vue 中可以通过动态绑定样式和类名实现红包上下飘动的效果。定义一个 CSS 动画描述上下移动的关键帧,通过 Vue 控制动画的播放状态。

.red-envelope {
  position: absolute;
  animation: float 3s ease-in-out infinite;
}

@keyframes float {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-20px);
  }
}

在 Vue 组件中绑定样式类:

<template>
  <div class="red-envelope" :style="{ left: `${x}px`, top: `${y}px` }">
    <img src="red-envelope.png" alt="红包">
  </div>
</template>

<script>
export default {
  data() {
    return {
      x: Math.random() * window.innerWidth,
      y: Math.random() * window.innerHeight
    }
  }
}
</script>

使用 GSAP 实现更流畅动画

GSAP 是一个专业的动画库,可以实现更复杂的红包飘动效果。

安装 GSAP:

npm install gsap

在组件中使用:

<template>
  <div ref="envelope" class="red-envelope">
    <img src="red-envelope.png" alt="红包">
  </div>
</template>

<script>
import { gsap } from 'gsap'

export default {
  mounted() {
    gsap.to(this.$refs.envelope, {
      y: -20,
      duration: 2,
      repeat: -1,
      yoyo: true,
      ease: "sine.inOut"
    })
  }
}
</script>

多个红包随机飘动效果

对于多个红包的场景,可以使用 v-for 循环生成,并为每个红包设置不同的动画参数。

<template>
  <div 
    v-for="(env, index) in envelopes" 
    :key="index" 
    class="red-envelope"
    :style="{
      left: `${env.x}px`,
      top: `${env.y}px`
    }"
    ref="envelopes"
  >
    <img src="red-envelope.png" alt="红包">
  </div>
</template>

<script>
export default {
  data() {
    return {
      envelopes: Array(10).fill().map(() => ({
        x: Math.random() * window.innerWidth,
        y: Math.random() * window.innerHeight
      }))
    }
  },
  mounted() {
    this.$refs.envelopes.forEach(el => {
      const duration = 2 + Math.random() * 3;
      const delay = Math.random() * 2;
      el.style.animation = `float ${duration}s ease-in-out ${delay}s infinite`;
    });
  }
}
</script>

添加点击交互效果

可以为红包添加点击事件,点击时播放消失动画:

vue实现红包上下

<template>
  <div 
    v-for="(env, index) in envelopes" 
    :key="index" 
    class="red-envelope"
    :style="{
      left: `${env.x}px`,
      top: `${env.y}px`,
      opacity: env.visible ? 1 : 0,
      transition: 'opacity 0.5s'
    }"
    @click="collectEnvelope(index)"
  >
    <img src="red-envelope.png" alt="红包">
  </div>
</template>

<script>
export default {
  methods: {
    collectEnvelope(index) {
      this.envelopes[index].visible = false;
      // 其他收集逻辑
    }
  }
}
</script>

这些方法提供了从简单到复杂的红包飘动动画实现方案,可以根据具体需求选择适合的方式。CSS 动画适合简单效果,GSAP 适合需要精细控制的复杂动画,v-for 适合批量生成多个动画元素。

标签: 红包上下
分享给朋友:

相关文章

vue实现红包雨

vue实现红包雨

实现红包雨的基本思路 红包雨是一种常见的互动效果,通常用于节日活动或营销场景。在Vue中实现红包雨需要结合CSS动画和JavaScript逻辑。 创建红包组件 设计一个红包组件,包含图片和可能的点击…

vue实现上下滚动列表

vue实现上下滚动列表

vue实现上下滚动列表 使用Vue实现上下滚动列表可以通过多种方式完成,包括CSS动画、JavaScript定时器或第三方库。以下是几种常见方法: 使用CSS动画实现滚动 通过CSS的@keyfra…

vue实现内容上下滚动

vue实现内容上下滚动

实现内容上下滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性实现内容滚动效果。适用于简单的文字或元素滚动。 <template> &l…

js实现图片上下浮动

js实现图片上下浮动

使用 CSS 动画实现图片上下浮动 通过 CSS 的 @keyframes 和 animation 属性可以实现图片上下浮动的效果。这种方法性能较好,适合简单的动画需求。 .floating-ima…

js实现红包雨怎么实现

js实现红包雨怎么实现

红包雨实现思路 红包雨是一种常见的互动效果,通过JavaScript可以实现动态生成红包、控制下落动画、碰撞检测以及点击交互等功能。以下是实现红包雨的核心方法: 初始化红包容器 创建一个HTML容器…

js红包雨实现

js红包雨实现

实现红包雨的基本思路 红包雨是一种常见的互动效果,通常用于节日活动或营销场景。通过 JavaScript 可以实现动态生成红包、控制下落动画以及交互逻辑。 核心代码结构 HTML 部分需要准备一个容…