使用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 sudoku 数独智力游戏生成代码
Mar 27 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
js按条件生成随机json:randomjson实现方法
Apr 07 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
Nov 06 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
Vue项目环境搭建详细总结
Sep 26 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
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python实现dict版图遍历示例
2014/02/19 Python
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
Hotels.com南非:酒店预订
2017/11/02 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
20年同学聚会感言
2014/02/03 职场文书
致800米运动员广播稿
2014/02/16 职场文书
教师党员公开承诺书
2014/03/25 职场文书
节电标语大全
2014/06/23 职场文书
培训科主任岗位职责
2014/08/08 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
2019教师的学习计划
2019/06/25 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL