当前位置:首页 > VUE

vue 动画 实现

2026-01-12 19:00:50VUE

Vue 动画实现基础

Vue 提供了 <transition><transition-group> 组件,结合 CSS 或 JavaScript 钩子实现动画效果。核心是通过条件渲染(如 v-ifv-show)或动态数据驱动元素进入/离开的过渡。

使用 CSS 过渡类名

Vue 会自动为元素添加以下类名,通过 CSS 定义动画效果:

  • .v-enter-from / .v-leave-from:进入/离开的初始状态。
  • .v-enter-active / .v-leave-active:定义过渡持续时间、缓动函数。
  • .v-enter-to / .v-leave-to:进入/离开的结束状态。

示例代码:

<transition name="fade">
  <p v-if="show">内容</p>
</transition>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter-from, .fade-leave-to {
  opacity: 0;
}

自定义过渡类名

可通过 enter-classleave-class 等属性指定自定义类名,与第三方动画库(如 Animate.css)结合:

<transition
  enter-active-class="animate__animated animate__fadeIn"
  leave-active-class="animate__animated animate__fadeOut"
>
  <p v-if="show">内容</p>
</transition>

JavaScript 钩子动画

通过 @before-enter@enter 等钩子函数实现更复杂的动画逻辑,适合与 GSAP 等库配合:

<transition
  @before-enter="beforeEnter"
  @enter="enter"
  @leave="leave"
>
  <p v-if="show">内容</p>
</transition>
methods: {
  beforeEnter(el) {
    el.style.opacity = 0;
  },
  enter(el, done) {
    gsap.to(el, {
      opacity: 1,
      duration: 1,
      onComplete: done
    });
  },
  leave(el, done) {
    gsap.to(el, {
      opacity: 0,
      duration: 0.5,
      onComplete: done
    });
  }
}

列表动画(transition-group)

为动态列表项添加动画时,需使用 <transition-group> 并设置 key

<transition-group name="list" tag="ul">
  <li v-for="item in items" :key="item.id">
    {{ item.text }}
  </li>
</transition-group>
.list-enter-active, .list-leave-active {
  transition: all 0.5s;
}
.list-enter-from, .list-leave-to {
  opacity: 0;
  transform: translateY(30px);
}

状态动画

通过响应式数据驱动 SVG 或数字变化,结合计算属性或侦听器实现动态效果:

vue 动画 实现

<svg>
  <circle :r="radius" fill="blue"></circle>
</svg>
data() {
  return { radius: 10 };
},
methods: {
  grow() {
    gsap.to(this, { radius: 20, duration: 1 });
  }
}

性能优化建议

  • 优先使用 CSS 动画(如 transformopacity),避免触发重绘。
  • 对复杂动画使用 will-change 提示浏览器优化。
  • 列表动画中为元素设置 key 以提高 Diff 效率。

通过组合上述方法,可覆盖从简单过渡到复杂交互动画的大部分场景。

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

相关文章

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue单选实现

vue单选实现

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

实现简单vue

实现简单vue

实现一个简单的 Vue.js 框架 Vue.js 的核心功能包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化版的 Vue 实现,涵盖基本功能。 数据响应式系统 使用 Object.define…

vue实现gridlayout

vue实现gridlayout

Vue 实现 Grid Layout 使用 CSS Grid 布局 CSS Grid 是一种强大的布局系统,可以直接在 Vue 组件的样式中使用。通过定义网格容器和网格项,可以快速实现复杂的布局结构。…

vue实现切换隐藏

vue实现切换隐藏

使用 v-show 指令实现切换隐藏 在 Vue 中,v-show 是最简单的切换元素显示/隐藏的方法。它通过 CSS 的 display 属性控制元素可见性。 <template>…