vue路由切换动画(转场动画)

通过transition 更改效果

html 复制代码
<template>
    <el-container class="h-100">
        <el-main>
            <transition :name="transitionName">
                <!-- <keep-alive v-if="$route.meta.keepAlive"> -->
                <router-view :key="$route.fullPath" />
                <!-- </keep-alive> -->
            </transition>
        </el-main>
    </el-container>
</template>

<script>
 export default {

    data() {
        return {
            transitionName: 'transitionLeft',
        };
    },
      watch: {
        '$route'(to, from) {
            const arr = ['coverSheet', 'home', 'product', 'about',]
            let toPath = to.path.split('/')[to.path.split('/').length - 1]
            let fromPath = from.path.split('/')[from.path.split('/').length - 1]

            if (toPath === 'coverSheet') {
                this.transitionName = 'transitionScale'
                return
            }
            if (fromPath === 'coverSheet' && toPath === 'home') {
                this.transitionName = 'transitionScale'
                return
            }
            //内页就直接切换
            if (arr.indexOf(toPath) == -1) {
                this.transitionName = 'transitionFade'
                return
            }	
            //判断,应该是左划还是右划效果,arr定义从左到右的页面路径
            this.transitionName = arr.indexOf(toPath) > arr.indexOf(fromPath) ? 'transitionLeft' : 'transitionRight'
        }
    },

}
</script>

<style lang="scss" scoped>
.transitionLeft-enter,
.transitionRight-leave-active {
    -webkit-transform: translate(100%, 0);
    transform: translate(100%, 0);
    transition: all 0.4s ease-out;
}

.transitionLeft-leave-active,
.transitionRight-enter {
    -webkit-transform: translate(-100%, 0);
    transform: translate(-100%, 0);
    transition: all 0.4s ease-out;
}

.transitionLeft-enter-active,
.transitionRight-enter-active {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 0;
    transition: all 0.4s ease-out;
}

.transitionScale-leave-active {
    transform: scale(1);
    transition: all 0.4s ease-out;
}

.transitionScale-enter {
    -webkit-transform: translate(-100%, 0);
    transform: translate(-100%, 0);
    transform: scale(0.4);
    transition: all 0.4s ease-out;
}

.transitionScale-enter-active {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    transition: all 0.4s ease-out;
    bottom: 0;
}


.transitionFade-enter-from,
.transitionFade-leave-to {
    opacity: 0;
}

.transitionFade-enter-to,
.transitionFade-leave-from {
    opacity: 1;
}

.transitionFade-enter-active,
.transitionFade-leave-active {
    transition: opacity 0.01s linear 0s;
}
</style >
相关推荐
前端之虎陈随易13 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·vue.js·人工智能·typescript·node.js
kyriewen14 小时前
豆包和千问同时关了智能体,我用它们搭的 3 个自动化全废了——迁移方案整理
前端·javascript·ai编程
铁皮饭盒14 小时前
用 Bun.cron 定时 7 月 7 日,为啥? 看图1
javascript
格子软件16 小时前
2026年GEO贴牌代理:分布式多级分账状态机源码深度解构
java·vue.js·分布式·vue·geo
之歆16 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
丹宇码农20 小时前
把 HLS 字幕玩出花:zwPlayer 如何让 M3U8 视频支持全文搜索、翻译与码率自适应
前端·javascript·音视频·hls·视频播放器
GuWenyue21 小时前
提示词彻底过时?一套上下文工程方案,3步让LLM落地生产,代码直接复用
前端·javascript·人工智能
奶油mm1 天前
公司技术债堆积如山,我一人之力用 Vue3 偷换了整个前端架构
前端·vue.js
用户938515635071 天前
深入理解 JavaScript 中的 this 与数据存储的奥秘
前端·javascript
Tian_Hang1 天前
eclipse ditto 学习笔记
运维·服务器·开发语言·javascript·3d