使用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 相关文章推荐
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
动态的创建一个元素createElement及删除一个元素
Jan 24 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
简介JavaScript中getUTCMonth()方法的使用
Jun 10 Javascript
基于canvas的二维码邀请函生成插件
Feb 14 Javascript
将angular-ui的分页组件封装成指令的方法详解
May 10 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
swiper4实现移动端导航切换
Oct 16 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
Feb 09 Javascript
vant 解决tab切换插件标题样式自定义的问题
Nov 13 Javascript
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
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
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
python进程与线程小结实例分析
2018/11/11 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
原生JS实现圆环拖拽效果
2017/04/07 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
申报职称专业技术个人的自我评价
2013/12/12 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers