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 相关文章推荐
一个可以显示阴历的JS代码
Mar 05 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
Apr 13 Javascript
jquery检测input checked 控件是否被选中的方法
Mar 26 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 Javascript
jQuery选择器源码解读(二):select方法
Mar 31 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
Oct 24 Javascript
JS简单实现数组去重的方法示例
Mar 27 Javascript
JS实现颜色的10进制转化成rgba格式的方法
Sep 04 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 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中OO之静态关键字以及类常量的详解
2013/06/07 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python生成器与迭代器详解
2019/01/01 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python 等差数列末项计算方式
2020/05/03 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
管理科学大学生求职信
2013/11/13 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
老公保证书范文
2014/04/29 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
政府法律服务方案
2014/06/14 职场文书
手机被没收的检讨书
2014/10/04 职场文书
博士论文答辩开场白
2015/06/01 职场文书