当前位置:首页 > VUE

vue实现切换路由动画

2026-02-21 21:59:06VUE

实现路由切换动画的基本方法

在Vue中实现路由切换动画通常结合<transition>组件和Vue Router完成。以下是一个基础实现示例:

<template>
  <transition name="fade" mode="out-in">
    <router-view></router-view>
  </transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

动态路由过渡效果

可以根据不同路由设置不同的过渡效果:

vue实现切换路由动画

<template>
  <transition :name="transitionName">
    <router-view></router-view>
  </transition>
</template>

<script>
export default {
  data() {
    return {
      transitionName: 'slide-left'
    }
  },
  watch: {
    '$route'(to, from) {
      const toDepth = to.path.split('/').length
      const fromDepth = from.path.split('/').length
      this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left'
    }
  }
}
</script>

<style>
.slide-left-enter-active,
.slide-left-leave-active,
.slide-right-enter-active,
.slide-right-leave-active {
  transition: transform 0.5s;
}
.slide-left-enter {
  transform: translateX(100%);
}
.slide-left-leave-to {
  transform: translateX(-100%);
}
.slide-right-enter {
  transform: translateX(-100%);
}
.slide-right-leave-to {
  transform: translateX(100%);
}
</style>

使用CSS动画库

结合Animate.css等CSS动画库可以快速实现丰富效果:

vue实现切换路由动画

<template>
  <transition
    enter-active-class="animate__animated animate__fadeIn"
    leave-active-class="animate__animated animate__fadeOut"
    mode="out-in"
  >
    <router-view></router-view>
  </transition>
</template>

<script>
import 'animate.css'
</script>

基于路由元信息的动画控制

通过路由配置中的meta字段控制不同路由的动画:

// router.js
{
  path: '/home',
  component: Home,
  meta: {
    transition: 'zoom'
  }
}

// App.vue
<template>
  <transition :name="$route.meta.transition || 'fade'">
    <router-view></router-view>
  </transition>
</template>

实现3D翻转动画

创建更复杂的3D过渡效果:

<template>
  <transition name="flip" mode="out-in">
    <router-view></router-view>
  </transition>
</template>

<style>
.flip-enter-active {
  animation: flip-in 0.5s ease-out;
}
.flip-leave-active {
  animation: flip-out 0.5s ease-out;
}
@keyframes flip-in {
  0% {
    transform: rotateY(90deg);
    opacity: 0;
  }
  100% {
    transform: rotateY(0deg);
    opacity: 1;
  }
}
@keyframes flip-out {
  0% {
    transform: rotateY(0deg);
    opacity: 1;
  }
  100% {
    transform: rotateY(90deg);
    opacity: 0;
  }
}
</style>

注意事项

  • 使用mode="out-in"确保当前组件先完成离开动画,新组件再开始进入动画
  • 动画性能优化:优先使用CSS transforms和opacity属性,避免触发重排
  • 移动端考虑:简化复杂动画以保证性能
  • 可访问性:确保动画不会影响用户操作体验

标签: 路由动画
分享给朋友:

相关文章

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要依赖内置的 <transition> 和 <transition-group> 组件,结合 CSS 或 JavaS…

vue 实现动画

vue 实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置组件、CSS 过渡/动画以及第三方库集成。 使用 <transition> 组件 Vue 内置的 <transi…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

vue加载动画实现

vue加载动画实现

Vue 加载动画实现方法 使用 CSS 动画或过渡 在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画: .loading-spinner { width: 40…

vue路由实现iframe

vue路由实现iframe

Vue 路由实现 iframe 的方法 在 Vue 项目中,可以通过路由配置和组件的方式实现 iframe 的嵌入。以下是具体实现步骤: 创建 iframe 组件 新建一个 Vue 组件用于承载…

vue路由实现思路

vue路由实现思路

Vue 路由实现思路 Vue 路由的核心是通过 Vue Router 库实现单页应用(SPA)的页面切换,避免整页刷新。以下是关键实现思路: 安装与引入 Vue Router 通过 npm 或 y…