vue router 切换路由的时候,页面的动画效果,使页面切换好看,以及控制有的页面使用切换路由特效,有的页面不用

一、使用切换效果

在router文件中 useTransition: true代表需要动画

meta: {

title: "新开卡预填表单",

keepAlive: true,
useTransition: true

},

javascript 复制代码
[
	{
		path: "/",
		name: "Home",
		meta: {
			title: "首页",
			keepAlive: true,
			useTransition: false
		},
		component: () => import("@/views/home.vue")
	},
	{
		path: "/clientPortrait",
		name: "clientPortrait",
		meta: {
			title: "画像",
			keepAlive: true,
			useTransition: true
		},
		component: () => import("@/views/clientPortrait/clientPortrait.vue")
	},
	{
		path: "/sendCardInputForm",
		name: "sendCardInputForm",
		meta: {
			title: "预填表单",
			keepAlive: true,
			useTransition: true
		},
		component: () => import("@/views/sendCard/inputForm.vue")
	},

在app.vue文件

//路由守卫

router.beforeEach方法,获取来自和去往的路由

useTransition来代表是否需要动画,获取to页面的路由状态,来判断useTransition为true还是false;

from为true to也为true 的时候,切换页面有特效,所以需要设置延时的true,以保证切走的时候有特效,这是下方代码的意义
setTimeout(() => {
// 离开sendCardInputForm,transferAccountsInputForm 需要动画
useTransition.value = true;
}, 1000);

javascript 复制代码
	<!-- <RouterView></RouterView> -->
	<RouterView v-if="!useTransition"></RouterView>
	<RouterView v-if="useTransition" v-slot="{ Component }">
		<transition name="slide" mode="out-in">
			<component :is="Component" />
		</transition>
	</RouterView>
javascript 复制代码
import { useRoute, useRouter } from "vue-router";
import { ref } from "vue";
const route = useRoute();
const router = useRouter();
let routes = router.getRoutes();
// 页面切换是否需要动画
let useTransition = ref(false);

useTransition.value = route.meta && route.meta.useTransition ? true : false;

//路由守卫
router.beforeEach((to, from, next) => {
	if (
		to.name === "Home" &&
		(from.name === "sendCardInputForm" || from.name === "transferAccountsInputForm")
	) {
		// sendCardInputForm,transferAccountsInputForm 返回首页不需要动画
		useTransition.value = false;
	} else if (to.name === "Home" && from.name === "clientPortrait") {
		// 画像返回首页需要动画
		useTransition.value = true;
	} else if (to.name === "sendCardInputForm" || to.name === "transferAccountsInputForm") {
		// 进入sendCardInputForm,transferAccountsInputForm 不需要动画
		useTransition.value = false;
		setTimeout(() => {
			// 离开sendCardInputForm,transferAccountsInputForm 需要动画
			useTransition.value = true;
		}, 1000);
	} else {
		//除了以上特别的路由,其他的按照router文件里配置的来决定需要不需要动画效果
		useTransition.value = to.meta && to.meta.useTransition ? true : false;
	}
	next();
});

transition name="slide" mode="out-in" slide的动画的css,滑入滑出,标签里 out-in先出后入

css 复制代码
.slide-enter-active,
.slide-leave-active {
	transition: all 0.75s ease-out;
}

.slide-enter-to {
	position: absolute;
	left: 0;
}

.slide-enter-from {
	position: absolute;
	left: -100%;
}

.slide-leave-to {
	position: absolute;
	right: -100%;
}

.slide-leave-from {
	position: absolute;
	right: 0;
}

不知道为什么,这个动画在pc端是平移的out in

在移动端out时候会向右上角缩小,平移的in

有大佬懂得可以赐教

页面动画就是这样了,bye~~

相关推荐
PineappleCoder18 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪18 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯18 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn089518 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视18 小时前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
CreasyChan19 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
JIngJaneIL19 小时前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
+VX:Fegn089519 小时前
计算机毕业设计|基于springboot + vue图书管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
阿蒙Amon20 小时前
JavaScript学习笔记:6.表达式和运算符
javascript·笔记·学习
hashiqimiya20 小时前
两个步骤,打包war,tomcat使用war包
java·服务器·前端