当前位置:首页 > 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;
  }
}

注意事项

vue实现路由旋转切换

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

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

相关文章

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…

vue实现导入

vue实现导入

Vue 实现文件导入功能 使用 <input type="file"> 元素 在 Vue 模板中添加一个文件输入元素,绑定 change 事件处理函数。 <template>…

vue实现刷卡

vue实现刷卡

Vue 实现刷卡效果 在 Vue 中实现刷卡效果可以通过 CSS 动画和 Vue 的过渡系统结合完成。以下是一种常见的实现方式: 基础实现方法 安装 Vue 过渡依赖(如果尚未安装): npm i…