当前位置:首页 > VUE

vue路由实现滑动

2026-02-10 19:03:22VUE

Vue 路由实现滑动效果的方法

在 Vue 项目中,可以通过以下几种方式实现路由切换时的滑动效果。

使用 Vue Router 的过渡动画

Vue Router 内置支持过渡效果,可以通过 <transition> 组件实现滑动动画。以下是一个简单的示例:

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

<style>
.slide-enter-active,
.slide-leave-active {
  transition: transform 0.5s ease;
}

.slide-enter-from {
  transform: translateX(100%);
}

.slide-leave-to {
  transform: translateX(-100%);
}
</style>

使用第三方库 vue-page-transition

vue-page-transition 是一个专门为 Vue Router 设计的过渡动画库,支持多种滑动效果。

安装:

npm install vue-page-transition

使用:

<template>
  <vue-page-transition name="fade-in-right">
    <router-view></router-view>
  </vue-page-transition>
</template>

<script>
import { VuePageTransition } from 'vue-page-transition'

export default {
  components: {
    VuePageTransition
  }
}
</script>

自定义滑动效果

如果需要更复杂的滑动效果,可以结合 Vue 的过渡钩子和 CSS 动画自定义实现。

<template>
  <transition
    @before-enter="beforeEnter"
    @enter="enter"
    @leave="leave"
    :css="false"
  >
    <router-view></router-view>
  </transition>
</template>

<script>
export default {
  methods: {
    beforeEnter(el) {
      el.style.transform = 'translateX(100%)'
    },
    enter(el, done) {
      const animation = el.animate(
        [{ transform: 'translateX(100%)' }, { transform: 'translateX(0)' }],
        { duration: 500 }
      )
      animation.onfinish = done
    },
    leave(el, done) {
      const animation = el.animate(
        [{ transform: 'translateX(0)' }, { transform: 'translateX(-100%)' }],
        { duration: 500 }
      )
      animation.onfinish = done
    }
  }
}
</script>

根据路由方向动态设置滑动效果

可以通过监听路由变化,判断前进或后退方向,动态设置不同的滑动效果。

<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.meta.depth || 0
      const fromDepth = from.meta.depth || 0
      this.transitionName = toDepth > fromDepth ? 'slide-left' : 'slide-right'
    }
  }
}
</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-from {
  transform: translateX(100%);
}

.slide-left-leave-to {
  transform: translateX(-100%);
}

.slide-right-enter-from {
  transform: translateX(-100%);
}

.slide-right-leave-to {
  transform: translateX(100%);
}
</style>

使用 CSS 框架的动画效果

如果项目使用了 CSS 框架如 Animate.css,可以直接应用预定义的滑动动画。

vue路由实现滑动

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

<script>
import 'animate.css'
export default {}
</script>

以上方法可以根据项目需求选择适合的实现方式,从简单的 CSS 过渡到复杂的自定义动画都能满足不同场景的需求。

标签: 路由vue
分享给朋友:

相关文章

vue实现自动翻译

vue实现自动翻译

Vue 实现自动翻译的方法 在 Vue 项目中实现自动翻译功能可以通过多种方式完成,以下是几种常见的方法: 使用第三方翻译 API 注册并获取翻译 API 的密钥(如 Google Translat…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…

vue实现循环

vue实现循环

Vue 实现循环的方法 在 Vue 中,可以通过 v-for 指令实现循环渲染列表或对象。以下是几种常见的用法: 遍历数组 使用 v-for 遍历数组时,可以同时获取当前项和索引: <ul&…

vue滑块实现

vue滑块实现

Vue滑块实现方法 使用原生HTML5 range input Vue中可以绑定原生HTML5的range类型input元素实现基础滑块功能: <template> <div&…

用vue实现全选

用vue实现全选

实现全选功能的基本思路 在Vue中实现全选功能通常涉及以下核心逻辑:通过一个布尔值控制全选状态,遍历子选项并同步其选中状态。以下是具体实现方法。 使用v-model绑定全选状态 在模板中,使用v-m…