当前位置:首页 > VUE

vue实现共享动画

2026-01-08 08:10:00VUE

Vue 共享动画实现方法

使用 Vue Transition 组件

Vue 内置的 Transition 组件可以实现元素进入/离开的过渡效果。通过命名过渡和 mode 属性可以控制多个元素的过渡顺序。

<transition name="fade" mode="out-in">
  <component :is="currentComponent"></component>
</transition>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}

使用 Vue Router 过渡

在路由切换时实现页面间的共享动画效果,可以在 router-view 外包裹 Transition 组件。

<router-view v-slot="{ Component }">
  <transition name="slide" mode="out-in">
    <component :is="Component" />
  </transition>
</router-view>

使用 FLIP 动画技术

FLIP (First, Last, Invert, Play) 技术可以实现高性能的共享元素过渡。

function flipAnimation(el, newRect, duration = 300) {
  const oldRect = el.getBoundingClientRect()
  const dx = oldRect.left - newRect.left
  const dy = oldRect.top - newRect.top
  const dw = oldRect.width / newRect.width
  const dh = oldRect.height / newRect.height

  el.style.transform = `translate(${dx}px, ${dy}px) scale(${dw}, ${dh})`
  el.style.transition = 'transform 0s'

  requestAnimationFrame(() => {
    el.style.transform = ''
    el.style.transition = `transform ${duration}ms`
  })
}

使用第三方库

Vue 生态中有多个专门处理动画的库:

  • VueUse 的 useTransition 组合式 API
  • Vue-Kinesis 提供物理动画效果
  • GSAP 与 Vue 结合使用
import { gsap } from 'gsap'

export default {
  methods: {
    animateElement(el) {
      gsap.from(el, {
        duration: 0.5,
        opacity: 0,
        y: 20,
        ease: 'power2.out'
      })
    }
  }
}

状态驱动的动画

通过 Vue 的响应式系统和计算属性,可以实现基于状态变化的动画。

const app = Vue.createApp({
  data() {
    return {
      progress: 0
    }
  },
  computed: {
    progressStyle() {
      return {
        width: `${this.progress}%`,
        transition: 'width 0.5s ease'
      }
    }
  }
})

组件间通信动画

通过事件总线或状态管理实现跨组件的动画协调。

// 在共享状态中
const store = {
  state: {
    activeElement: null
  },
  setActiveElement(id) {
    this.state.activeElement = id
  }
}

// 在组件中
watch(() => store.state.activeElement, (newVal, oldVal) => {
  if (this.id === newVal || this.id === oldVal) {
    this.animate()
  }
})

性能优化技巧

  • 使用 will-change 属性提示浏览器
  • 优先使用 transform 和 opacity 属性
  • 减少动画期间的 DOM 操作
  • 合理使用 requestAnimationFrame
.animated-element {
  will-change: transform, opacity;
}

vue实现共享动画

标签: 动画vue
分享给朋友:

相关文章

vue实现扫描二维码

vue实现扫描二维码

实现 Vue 扫描二维码功能 在 Vue 中实现扫描二维码功能,可以通过第三方库或原生 API 完成。以下是两种常见方法: 使用 vue-qrcode-reader 库 vue-qrcode-re…

vue实现单选

vue实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选功能。单选按钮的 v…

vue实现分支

vue实现分支

Vue 实现分支的方法 在 Vue 项目中实现分支功能通常涉及条件渲染、动态组件或路由控制。以下是几种常见的实现方式: 条件渲染(v-if/v-show) 使用 Vue 的指令根据条件显示不同内容…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要通过内置组件和第三方库支持。 使用 Vue 内置过渡组件 Vue 的 transition 和 transition-group 组件可…

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…