Vue路由切换时的左滑和右滑效果示例


Posted in Javascript onMay 29, 2018

如何实现Vue路由切换时的左滑和右滑效果,因为原作者ustbhuangyi老师的两个慕课项目中都没有这样的效果,于是突发奇想要做这个功能,看了看QQ、微信都没这样的效果,最后发现SegmentFault(思否) 和掘金两个app都有这样的效果,就以此为参考开始做了。

transition

首先看看官网 淡入淡出动画的例子:

<div id="demo">
 <button v-on:click="show = !show">
  Toggle
 </button>
 <transition name="fade">
  <p v-if="show">hello</p>
 </transition>
</div>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
.fade-enter-active, .fade-leave-active {
 transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
 opacity: 0;
}

左右切换效果

CSS部分

我们要实现的是左右切换的效果,所以要定义两种动画(左滑和右滑)

.transitionBody{
 transition: all 0.15s ease; /*定义动画的时间和过渡效果*/
}

.transitionLeft-enter,
.transitionRight-leave-active {
  -webkit-transform: translate(100%, 0);
  transform: translate(100%, 0); 
   /*当左滑进入右滑进入过渡动画*/
}

.transitionLeft-leave-active,
.transitionRight-enter {
  -webkit-transform: translate(-100%, 0); 
  transform: translate(-100%, 0); 
}

HTML部分

这里的 keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM,我们要把它也包裹在transition标签内,否则页面将重新渲染,切换的动画也会卡顿

<transition :name="transitionName">
  <keep-alive>
      <router-view class="transitionBody"></router-view>
  </keep-alive>
</transition>

JS部分

在Vue组件中,data必须是一个函数,将对象 {transitionName: ‘transitionLeft'} 挂载到Vue实例中,然后我们可以监听路由的 to 和 from 来判断此时应该左滑还是右滑,来动态切换transition的name值。

export default {
 data() {
   return {
    transitionName: 'transitionLeft'
   };
 },
 watch: { 
  '$route' (to, from) { 
   const arr = ['/goods','/ratings','/seller'];
   const compare = arr.indexOf(to.path)>arr.indexOf(from.path);
   this.transitionName = compare ? 'transitionLeft' : 'transitionRight';
  } 
 }  
}

点击链接体验一下: https://zc95.github.io/demo/vue-sell

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现每个数字上都带进度条的幻灯片
Feb 20 Javascript
js window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
JavaScript中九种常用排序算法
Sep 02 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
Apr 07 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
Mar 02 Javascript
jquery实现下拉框多选方法介绍
Jan 03 Javascript
JavaScript表单验证实现代码
May 22 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
Nov 27 Javascript
微信小程序实现上传图片功能
May 28 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 Javascript
Vue 组件传值几种常用方法【总结】
May 28 #Javascript
讲解vue-router之命名路由和命名视图
May 28 #Javascript
微信小程序实现图片上传功能
May 28 #Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 #Javascript
讲解vue-router之什么是编程式路由
May 28 #Javascript
讲解vue-router之什么是嵌套路由
May 28 #Javascript
微信小程序上传图片实例
May 28 #Javascript
You might like
php 全局变量范围分析
2009/08/07 PHP
PHP 递归效率分析
2009/11/24 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
扩展String功能方法
2006/09/22 Javascript
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
XML的代替者----JSON
2007/07/21 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python中运行并行任务技巧
2015/02/26 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python删除过期log文件操作实例解析
2018/01/31 Python
Python检测网络延迟的代码
2018/05/15 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
应聘美工求职信
2013/11/07 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
超市周年庆活动方案
2014/08/16 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
职代会闭幕词
2015/01/28 职场文书
初中重阳节活动总结
2015/05/05 职场文书
上班迟到检讨书
2015/05/06 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android