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拖动div、移动div、弹出层实现原理及示例
Apr 08 Javascript
微信小程序 animation API详解及实例代码
Oct 08 Javascript
JavaScript数据结构链表知识详解
Nov 21 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
Jquery-data的三种用法
Apr 18 jQuery
微信小程序实现轮播图效果
Sep 07 Javascript
JS实现判断有效的数独算法示例
Feb 25 Javascript
了解重排与重绘
May 29 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
vue实例的选项总结
Jun 09 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 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无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
JQuery 文本框使用小结
2010/05/22 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
Python中内建函数的简单用法说明
2016/05/05 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Django框架多表查询实例分析
2018/07/04 Python
Python字符串对象实现原理详解
2019/07/01 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Python如何输出警告信息
2020/07/30 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
明信片寄语大全
2014/04/08 职场文书
个人向公司借款协议书
2014/10/09 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
运动会通讯稿50字
2015/07/20 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书