使用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 相关文章推荐
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
Mar 11 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
Bootstrap基本样式学习笔记之图片(6)
Dec 07 Javascript
JS异步文件上传(兼容IE8+)
Apr 02 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
Sep 18 Javascript
vue中el-upload上传图片到七牛的示例代码
Oct 19 Javascript
浅析vue-router实现原理及两种模式
Feb 11 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 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操作类
2006/11/16 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
写出高质量的PHP程序
2012/02/04 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
php判断当前操作系统类型
2015/10/28 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
高级Java程序员面试题
2016/06/23 面试题
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
学习经验交流会总结
2015/11/02 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python