当前位置:首页 > VUE

vue路由实现滑动

2026-01-08 04:57:03VUE

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

使用 Vue Router 结合 CSS 过渡动画

在 Vue Router 的路由视图组件 <router-view> 上添加过渡效果,结合 CSS 实现滑动动画。

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

<script>
export default {
  data() {
    return {
      transitionName: 'slide-left'
    }
  },
  watch: {
    '$route'(to, from) {
      const toDepth = to.meta.index || 0
      const fromDepth = from.meta.index || 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: all 0.5s ease;
  position: absolute;
  width: 100%;
}

.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>

使用第三方库 vue-page-transition

vue-page-transition 是一个专门为 Vue 路由过渡效果设计的库,提供多种预定义的过渡效果。

安装:

npm install vue-page-transition

使用:

vue路由实现滑动

import Vue from 'vue'
import VuePageTransition from 'vue-page-transition'

Vue.use(VuePageTransition)
<template>
  <vue-page-transition name="fade-in-right">
    <router-view/>
  </vue-page-transition>
</template>

使用 Swiper 实现全屏滑动路由

结合 Swiper.js 可以实现类似移动端应用的全屏滑动路由效果。

安装 Swiper:

vue路由实现滑动

npm install swiper

实现代码:

<template>
  <swiper
    :options="swiperOption"
    @slideChangeTransitionEnd="onSlideChange"
    ref="mySwiper"
  >
    <swiper-slide v-for="(route, index) in routes" :key="index">
      <router-view :name="route.name"></router-view>
    </swiper-slide>
  </swiper>
</template>

<script>
import { Swiper, SwiperSlide } from 'swiper/vue'
import 'swiper/swiper.scss'

export default {
  components: {
    Swiper,
    SwiperSlide
  },
  data() {
    return {
      swiperOption: {
        direction: 'vertical',
        mousewheel: true
      },
      routes: [
        { name: 'home' },
        { name: 'about' },
        { name: 'contact' }
      ]
    }
  },
  methods: {
    onSlideChange() {
      const currentIndex = this.$refs.mySwiper.swiper.activeIndex
      this.$router.push(this.routes[currentIndex].name)
    }
  }
}
</script>

注意事项

路由滑动效果需要考虑页面堆叠上下文问题,确保使用 position: absolute 或合适的 z-index 设置。

对于复杂场景,可能需要结合 Vue 的 <keep-alive> 缓存路由组件状态,避免滑动时组件重复渲染导致的性能问题。

滑动方向可以根据实际需求调整,常见的有水平滑动(左右)和垂直滑动(上下)两种方式。

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

相关文章

vue实现倒计时

vue实现倒计时

Vue 实现倒计时的基本方法 使用 setInterval 和响应式数据 在 Vue 组件中定义一个响应式变量(如 countdown),通过 setInterval 每秒更新数值。组件销毁时清除…

简易实现vue

简易实现vue

简易 Vue 实现思路 核心是数据劫持结合发布-订阅模式,通过 Object.defineProperty 或 Proxy 监听数据变化,触发视图更新。 数据劫持实现 class Observer…

vue实现多选div

vue实现多选div

实现多选 DIV 的基本思路 在 Vue 中实现多选 DIV 功能,可以通过以下方法实现。主要思路是利用 v-model 绑定选中状态,结合 CSS 类名动态切换样式。 数据准备与模板结构 定义一个…

vue实现视频开场

vue实现视频开场

使用 Vue 实现视频开场动画 在 Vue 中实现视频开场动画可以通过结合 HTML5 的 <video> 标签和 Vue 的过渡效果或生命周期钩子来完成。以下是具体实现方法: 安装依…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue前端实现搜索

vue前端实现搜索

实现搜索功能的基本方法 在Vue中实现搜索功能通常涉及以下几个关键步骤,结合数据绑定、计算属性和方法调用来动态过滤和显示结果。 数据绑定与输入处理 使用v-model双向绑定搜索输入框的值,监听用…