当前位置:首页 > VUE

vue实现飞翔的蝴蝶

2026-02-24 02:52:00VUE

实现思路

在Vue中实现飞翔的蝴蝶动画,可以通过CSS动画结合动态数据绑定完成。核心是利用@keyframes定义蝴蝶翅膀扇动和飞行路径,通过Vue的响应式数据控制动画状态。

基础HTML结构

<template>
  <div class="scene">
    <div class="butterfly" :style="butterflyStyle">
      <div class="wings left-wing"></div>
      <div class="wings right-wing"></div>
    </div>
  </div>
</template>

CSS动画设计

.scene {
  position: relative;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  background: skyblue;
}

.butterfly {
  position: absolute;
  width: 50px;
  height: 50px;
  transform-origin: center;
}

.wings {
  position: absolute;
  width: 20px;
  height: 40px;
  background: linear-gradient(45deg, #ff00ff, #ff1493);
  border-radius: 50%;
}

.left-wing {
  left: 0;
  transform-origin: right center;
  animation: flap 0.5s infinite alternate;
}

.right-wing {
  right: 0;
  transform-origin: left center;
  animation: flap 0.5s infinite alternate-reverse;
}

@keyframes flap {
  0% { transform: rotateY(0deg); }
  100% { transform: rotateY(70deg); }
}

@keyframes fly {
  0% { transform: translate(0, 0) rotate(0deg); }
  25% { transform: translate(200px, 100px) rotate(20deg); }
  50% { transform: translate(400px, 50px) rotate(0deg); }
  75% { transform: translate(600px, 150px) rotate(-20deg); }
  100% { transform: translate(800px, 0) rotate(0deg); }
}

Vue动画控制

<script>
export default {
  data() {
    return {
      position: { x: 0, y: 0 },
      angle: 0,
      flightPath: []
    }
  },
  computed: {
    butterflyStyle() {
      return {
        transform: `translate(${this.position.x}px, ${this.position.y}px) rotate(${this.angle}deg)`,
        animation: 'fly 10s infinite linear'
      }
    }
  },
  mounted() {
    this.generateFlightPath()
  },
  methods: {
    generateFlightPath() {
      // 生成随机飞行路径点
      this.flightPath = Array.from({ length: 5 }, () => ({
        x: Math.random() * window.innerWidth,
        y: Math.random() * window.innerHeight
      }))
    }
  }
}
</script>

高级实现方案

对于更复杂的飞行轨迹,可以使用GSAP动画库:

vue实现飞翔的蝴蝶

  1. 安装GSAP

    vue实现飞翔的蝴蝶

    npm install gsap
  2. 实现贝塞尔曲线飞行

    
    import { gsap } from 'gsap'

methods: { startAnimation() { gsap.to(this.position, { duration: 10, x: this.flightPath.map(p => p.x), y: this.flightPath.map(p => p.y), ease: "sine.inOut", modifiers: { x: gsap.utils.unitize(x => parseFloat(x) + 'px'), y: gsap.utils.unitize(y => parseFloat(y) + 'px') }, repeat: -1 }) } }



### 性能优化建议

- 使用`will-change: transform`提升动画性能
- 对翅膀使用`transform-style: preserve-3d`
- 在移动端考虑减少动画复杂度
- 使用`requestAnimationFrame`进行手动动画控制

标签: 蝴蝶vue
分享给朋友:

相关文章

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

vue实现setinterval

vue实现setinterval

在 Vue 中使用 setInterval Vue 中可以通过生命周期钩子和方法结合 setInterval 实现定时任务。以下是一个完整的实现示例: <template> <…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入…

vue实现修改

vue实现修改

Vue 实现修改功能的方法 在 Vue 中实现修改功能通常涉及表单绑定、状态管理和 API 调用。以下是几种常见实现方式: 双向数据绑定实现表单修改 使用 v-model 指令绑定表单元素与组件数…