当前位置:首页 > VUE

vue实现路由旋转切换

2026-02-22 08:31:40VUE

Vue 路由切换动画实现

使用 Vue Router 结合过渡动画实现路由切换效果,核心是通过 Vue 的 <transition> 组件和 CSS 动画。

安装依赖 确保项目中已安装 vue-routervue,若未安装可通过以下命令安装:

npm install vue-router vue

基础路由配置router/index.js 中配置路由:

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

添加过渡动画App.vue 中使用 <transition> 包裹 <router-view>

<template>
  <router-view v-slot="{ Component }">
    <transition name="rotate" mode="out-in">
      <component :is="Component" />
    </transition>
  </router-view>
</template>

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

.rotate-enter-from {
  opacity: 0;
  transform: rotateY(90deg);
}

.rotate-leave-to {
  opacity: 0;
  transform: rotateY(-90deg);
}
</style>

进阶旋转动画效果

通过 CSS 自定义旋转轴和动画曲线增强效果:

.rotate-enter-active {
  animation: rotate-in 0.5s ease-out;
}

.rotate-leave-active {
  animation: rotate-out 0.5s ease-in;
}

@keyframes rotate-in {
  from {
    transform: rotateY(-90deg) scale(0.8);
    opacity: 0;
  }
  to {
    transform: rotateY(0deg) scale(1);
    opacity: 1;
  }
}

@keyframes rotate-out {
  from {
    transform: rotateY(0deg) scale(1);
    opacity: 1;
  }
  to {
    transform: rotateY(90deg) scale(0.8);
    opacity: 0;
  }
}

动态路由过渡

根据路由路径动态切换动画样式:

<script setup>
import { ref, watch } from 'vue';
import { useRoute } from 'vue-router';

const route = useRoute();
const transitionName = ref('fade');

watch(() => route.path, (newPath) => {
  transitionName.value = newPath === '/' ? 'rotate' : 'slide';
});
</script>

<template>
  <router-view v-slot="{ Component }">
    <transition :name="transitionName">
      <component :is="Component" />
    </transition>
  </router-view>
</template>

3D 旋转效果

启用 CSS 3D 变换提升视觉效果:

.rotate-enter-active {
  transform-style: preserve-3d;
  perspective: 1000px;
  animation: rotate-3d-in 0.8s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}

@keyframes rotate-3d-in {
  0% {
    transform: rotateX(70deg) translateZ(-200px);
    opacity: 0;
  }
  100% {
    transform: rotateX(0deg) translateZ(0);
    opacity: 1;
  }
}

注意事项

  • 确保父容器有明确的宽高和定位(如 position: relative
  • mode="out-in" 可避免新旧路由同时存在
  • 复杂动画建议使用 GSAP 等动画库优化性能

vue实现路由旋转切换

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

相关文章

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted 和…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件:…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> &l…