当前位置:首页 > VUE

vue实现动画原理

2026-01-19 02:21:31VUE

Vue 动画实现原理

Vue 的动画系统基于 CSS 过渡和动画,同时结合了 JavaScript 钩子函数。其核心是通过内置组件 <transition><transition-group> 管理元素的进入/离开动画或列表变化动画。

触发条件

动画触发依赖于以下条件之一:

  • 条件渲染(v-if
  • 条件展示(v-show
  • 动态组件(<component :is="...">
  • 组件根节点变化(通过 key 属性强制触发)

工作流程

  1. 自动嗅探目标元素是否应用了 CSS 过渡/动画 Vue 会在元素插入/删除时检查是否存在 transitionanimation 的 CSS 定义,若有则按以下时序处理:

    • 进入动画:插入元素 → 添加 v-enter-from 类 → 下一帧添加 v-enter-active → 触发 CSS 过渡 → 过渡完成后移除所有类
    • 离开动画:添加 v-leave-from 类 → 下一帧添加 v-leave-active → 触发 CSS 过渡 → 动画完成后移除元素
  2. 类名规则

    • 默认前缀为 v-,可通过 <transition name="fade"> 自定义(如 fade-enter-active
    • 关键类名:
      .v-enter-from { /* 进入开始状态 */ }
      .v-enter-active { /* 进入过渡效果 */ }
      .v-enter-to { /* 进入结束状态 */ }
      .v-leave-from { /* 离开开始状态 */ }
      .v-leave-active { /* 离开过渡效果 */ }
      .v-leave-to { /* 离开结束状态 */ }
  3. JavaScript 钩子 通过事件钩子实现更复杂的动画逻辑:

    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @after-enter="afterEnter"
      @enter-cancelled="enterCancelled"
      @before-leave="beforeLeave"
      @leave="leave"
      @after-leave="afterLeave"
      @leave-cancelled="leaveCancelled"
    >
      <!-- 内容 -->
    </transition>

    钩子函数接收元素对象和回调函数,需手动调用 done() 结束动画。

动画模式

  • in-out:新元素先进入,完成后旧元素离开
  • out-in:旧元素先离开,完成后新元素进入

列表动画

<transition-group> 用于渲染列表动画,特点:

  • 默认渲染为 <span>,可通过 tag 属性修改
  • 每个子元素必须有独立的 key
  • 内置 v-move 类处理元素位置变化的过渡效果

性能优化

  • 对纯显示/隐藏操作优先使用 v-show 而非 v-if
  • 对复杂动画使用 requestAnimationFrame
  • 避免在过渡期间操作 DOM

实现示例

CSS 过渡示例:

<transition name="slide">
  <div v-if="show">内容</div>
</transition>

<style>
.slide-enter-active, .slide-leave-active {
  transition: all 0.5s ease;
}
.slide-enter-from, .slide-leave-to {
  transform: translateX(100px);
  opacity: 0;
}
</style>

JavaScript 动画示例:

methods: {
  enter(el, done) {
    anime({
      targets: el,
      opacity: [0, 1],
      translateY: [-20, 0],
      duration: 500,
      complete: done
    });
  }
}

Vue 的动画系统通过这种声明式的方式,将 CSS 和 JavaScript 动画能力整合到响应式数据变化的框架中,实现了高效且灵活的动画效果。

vue实现动画原理

标签: 原理动画
分享给朋友:

相关文章

vue rooter 实现原理

vue rooter 实现原理

Vue Router 实现原理 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。其核心实现原理包括路由匹配、组件渲染和导航守卫等机制。 路由匹配与动态路由…

vue如何实现原理

vue如何实现原理

Vue 的核心实现原理 Vue 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化。以下分模块详细说明其实现机制。 响应式系统 Vue 2.x 使用 Object.defineProper…

vue实现gif动画

vue实现gif动画

Vue 中实现 GIF 动画的方法 在 Vue 中实现 GIF 动画可以通过多种方式完成,具体取决于需求和使用场景。以下是几种常见的方法: 直接使用 <img> 标签加载 GIF 最简单…

css动画制作原理

css动画制作原理

CSS动画制作原理 CSS动画通过关键帧(@keyframes)和动画属性(如animation-name、animation-duration)实现动态效果。核心原理分为两部分:定义动画关键帧和绑定…

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要通过 transition、transform 和 animation 属性实现。以下是几种常见的实现方法。 使用 transit…

vue的实现原理

vue的实现原理

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的关键部分: 响应式系统 Vue…