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


Posted in Javascript onOctober 31, 2019

背景

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

实现难点

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

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

解决方案

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

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
  }]
});

监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.

<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>

编写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.

以上这篇使用vue-router切换页面时实现设置过渡动画就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
Mar 01 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
JavaScript中Null与Undefined的区别解析
Jun 30 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
快速了解vue-cli 3.0 新特性
Feb 28 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
Apr 27 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 Javascript
Vue防止白屏添加首屏动画的实例
Oct 31 #Javascript
vue弹出框组件封装实例代码
Oct 31 #Javascript
使用zrender.js绘制体温单效果
Oct 31 #Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 #Javascript
selenium+java中用js来完成日期的修改
Oct 31 #Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 #Javascript
vue项目出现页面空白的解决方案
Oct 31 #Javascript
You might like
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
用ADODB.Stream转换
2007/01/22 Javascript
JavaScript While 循环基础教程
2007/04/05 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
python网络编程学习笔记(一)
2014/06/09 Python
Python编程入门的一些基本知识
2015/05/13 Python
python版本的读写锁操作方法
2016/04/25 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python之列表推导式的用法
2019/11/29 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
应届大学生简历中的自我评价
2014/01/15 职场文书
法人委托书的范本格式
2014/09/11 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
2015年女工委工作总结
2015/07/27 职场文书
小学六年级毕业感言
2015/07/30 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
Python 视频画质增强
2022/04/28 Python
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android