使用 vue-router 切换页面时怎么设置过渡动画

2023-11-16

如何实现切换页面时的过渡动画?

背景

今天在编写页面时,看到页面没有任何效果就只是直入直出,完全没有一点逼格,所以想要实现类似于原生app的那种切换页面时的特效,遂开始google,发现网上各种方案都是各有优缺点,于是整理了自认为优雅的方案并记录下来.

实现难点

  1. 如何判断切换路由时是前进还是后退

  2. 每次切换时向左向右切换动画如何实现

解决方案

  1. 我们需要给各个页面定义层级,在切换路由时判断用户是进入哪一层页面,如果用户进入更高层级那么做前进动画,如果用户退到低层级那么做后退动画.

router/index.js

import VueRouter from 'vue-router'
import Home from '../components/home/home'
import User from '../components/user/user'

var router = new VueRouter({
    routes:[{
        name:'test',
        path:'/',
        meta:{index:0},//meta对象的index用来定义当前路由的层级,由小到大,由低到高
        component:{
            template:'<div>test</div>'
        }
    },{
        name:'home',
        path:'/home',
        meta:{index:1},
        component:Home
    },{
        name:'user',
        path:'/user/:id',
        meta:{index:2},
        component:User
    }]
});
  1. 监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.
<template>
  <div id="app">
    <transition :name="transitionName">   
      <router-view></router-view>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'App',
  data(){
      return {
          transitionName:''
      }
  },
  watch: {//使用watch 监听$router的变化
    $route(to, from) {
      //如果to索引大于from索引,判断为前进状态,反之则为后退状态
      if(to.meta.index > from.meta.index){
	    //设置动画名称
        this.transitionName = 'slide-left';
      }else{
        this.transitionName = 'slide-right';
      }
    }
  }
}
</script>
  1. 编写slide-left 和 slide-right 类的动画
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
  will-change: transform;
  transition: all 500ms;
  position: absolute;
}
.slide-right-enter {
  opacity: 0;
  transform: translate3d(-100%, 0, 0);
}
.slide-right-leave-active {
  opacity: 0;
  transform: translate3d(100%, 0, 0);
}
.slide-left-enter {
  opacity: 0;
  transform: translate3d(100%, 0, 0);
}
.slide-left-leave-active {
  opacity: 0;
  transform: translate3d(-100%, 0, 0);
}

示例


CSDN markdown 禁用了iframe, 有翻墙工具的可以点击codesandbox demo.

我这里只是给大家提供一种实现思路,如果大家有更好的实现方式,或者开发了路由切换插件,可以在回复中分享给大家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 vue-router 切换页面时怎么设置过渡动画 的相关文章

随机推荐

  • axure怎么存html文件怎么打开,axure 保存html文件怎么打开

    2 回答 2020 08 18 浏览 71 分类 绘图建模 回答 1 谷歌内核的浏览器需要安装Axure的插件才能访问 2 火狐浏览器 好像可以 与IE浏览器 3 可以用本机搭建一个服务器 让人家访问你的IP 任何浏览器都可以 1 回答 2
  • cobalt strike木马免杀

    0x001 针对powershell免杀 工具 Invoke Obfuscation 操作实例 1 利用CS生成powershell木马 2 进入invoke Obsfuscation文件 使用powershell命令执行 3 利用powe
  • CUDA Samples:Vector Add

    以下CUDA sample是分别用C 和CUDA实现的两向量相加操作 参考CUDA 8 0中的sample C ProgramData NVIDIA Corporation CUDA Samples v8 0 0 Simple 并对其中使用
  • 《深度学习入门》鱼书学习笔记(代码可运行)

    X 前言 X 1环境配置 x 1 1安装Anaconda 直接官网下载Anaconda 安装完成后 conda V查看是否安装成功 activate gt 进入base环境 conda create n py37 python 3 7 创建
  • 启用tun设备开启tap虚拟网卡功能

    注意 该文章中的arp应答部分是有问题的 由于作者现在已经没有实验环境无法再进行修正了 望看该文章的人注意一下 关于tun设备启用tap网卡 就是启用一个字符设备 使用open函数得到一个tun设备的文件描述符 可以使用write和read
  • (七)mkdocs学习——其他技巧

    mkdocs学习笔记系列 一 MkDocs 学习 快速开始 二 MkDocs学习笔记 撰写文档 三 MkDocs学习 配置主题 四 MkDocs学习 自定义主题 五 MkDocs学习 配置文件 六 MkDocs学习 部署文档 七 mkdoc
  • 如何搭建自己的写作素材库,快来学,方法高效简单

    我们平时看过的书 做过的事 不及时记下来 很可能过几天就忘记了 由此看来 搭建自己的写作素材库非常有必要 尤其是写作者 写稿的速度取决于自己写作素材的储备量 你储备的素材越多 写作时便可以拿来即用 不用再费尽心思找个好几天 我们该如何搭建自
  • ACL的规则总结

    按照由上到下的顺序执行 找到第一个匹配后既执行相应的操作 然后跳出ACL 每条ACL的末尾隐含一条deny any 的规则 ACL可应用于某个具体的IP接口的出方向或入方向 ACL可应用于系统的某种特定的服务 如针对设备的TELNET 在引
  • WEB开发中遇到的困难,controller方法对应的url显示不出来页面

    问题 controller方法对应的url返回页面但是显示不出来页面 等待下午来人求救 这个问题真是日了狗了啊 明明项目没动 刚开始运行项目的时候总是报错 java lang ClassNotFoundException 然后检查了一下对应
  • linux vi的命令

    inux vi命令详解 刚开始学着用linux 对vi命令不是很熟 在网上转接了一篇 vi编辑器是所有Unix及Linux系统下标准的编辑器 它的强大不逊色于任何最新的文本编辑器 这里只是简单地介绍一下它的用法和一小部分指 令 由于 对Un
  • 【录制Selenium IDE导出python代码】

    Generated by Selenium IDE import pytest import time import json from selenium import webdriver from selenium webdriver c
  • PHP内置函数intval()使用不当的安全漏洞分析

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 描述 intval函数有个特性 直到遇上数字或正负符号才开始做转换 再遇到非数字或字符串结束时 结束转换 在某些应用程序里由于对intval函数这个特性认识不够 错误的
  • react中使用splice函数去删除数组的某一项

    1 splice函数 splice 方法向 从数组中添加 删除项目 然后返回被删除的项目 slice 方法可从已有的数组中返回选定的元素 所以 在使用的时候 就要注意的是 splice返回的是被删除的项目 2 举一个我在react中使用的小
  • 单片机预备知识(电平、进制转换、字节、数据类型)

    参考 郭天祥十天带你精通51单片机 网址 https www bilibili com video BV1DW411a7mz spm id from 333 788 videocard 0 目录 电平特性 二进制 进制转换 1K字节等于多少
  • Ubuntu18.04 安装cmake-3.18.0,报错openssl

    1 问题描述 Downloads wget https cmake org files v3 18 cmake 3 18 0 tar gz Downloads tar xf cmake 3 18 0 tar gz Downloads cd
  • mvvm框架是什么

    MVVM是Model View ViewModel的简写 它本质上就是MVC Model View Controller 的改进版 在开发过程中 由于需求的变更或添加 项目的复杂度越来越高 代码量越来越大 此时我们会发现MVC维护起来有些吃
  • mysql表操作-约束删除、用户填加、授权和撤权

    目录 一 表的约束删除 1 查看所有表的约束条件 2 删除主键 3 删除唯一键 4 删除check键值 5 删除check键值 6 删除not null键值并删除check键值 7 删除键外值 8 检查表的约束条件是否存在 二 设置数据库密
  • 数据通信介绍

    数据通信方式有两种 串行通信与并行通信 一 串行通信 串行通信是指数据的各位在同一根数据线上逐位发送和接收 如下图所示 它可以按照数据传送方向和通信方式来划分 如果按照数据传送方向分类 则分为以下方式 单工 数据传输只支持数据在一个方向上传
  • 链接库的时候,提示load shared libraries error,xxx file too short

    该问题主要是提示 load shared libraries error xxx file too short 软连接链接问题 原因 程序链接的动态库中有软连接 但是软连接没有 l 标识 被识别成了实际的动态库文件 软连接文件又太小 所以就
  • 使用 vue-router 切换页面时怎么设置过渡动画

    如何实现切换页面时的过渡动画 背景 今天在编写页面时 看到页面没有任何效果就只是直入直出 完全没有一点逼格 所以想要实现类似于原生app的那种切换页面时的特效 遂开始google 发现网上各种方案都是各有优缺点 于是整理了自认为优雅的方案并