HTML文本页面:

  1. <template>
  2. <div id="app>
  3. <transition :name="direction" mode="out-in"> <!--动态获得transition 的name值-->
  4. <router-view class="app-view" wechat-title></router-view>
  5. </transition>
  6. </div>
  7. </template>

JS定义代码:定义在全局js文件里面

  1. router.beforeEach((to, from, next) => {
  2. const list = ['home', 'group', 'user'] // 将需要切换效果的路由名称组成一个数组
  3. const toName = to.name // 即将进入的路由名字
  4. const fromName = from.name // 即将离开的路由名字
  5. const toIndex = list.indexOf(toName) // 进入下标
  6. const fromIndex = list.indexOf(fromName) // 离开下标
  7. let direction = ''
  8.  
  9. if (toIndex > -1 && fromIndex > -1) { // 如果下标都存在
  10. if (toIndex < fromIndex) { // 如果进入的下标小于离开的下标,那么是左滑
  11. direction = 'left'
  12. } else {
  13. direction = 'right' // 如果进入的下标大于离开的下标,那么是右滑
  14. }
  15. }
  16.  
  17. store.state.viewDirection = direction //这里使用vuex进行赋值
  18.  
  19. return next()
  20. })

在App.vue文件中,进行计算属性:

  1. computed: {
  2.  
  3. direction () {
  4. const viewDir = this.$store.state.viewDirection
  5. let tranName = ''
  6.  
  7. if (viewDir === 'left') {
  8. tranName = 'view-out'
  9. } else if (viewDir === 'right') {
  10. tranName = 'view-in'
  11. } else {
  12. tranName = 'fade'
  13. }
  14.  
  15. return tranName
  16. },
  17. },

css3进行动画效果定义:使用sass

待定义引入样式文件:

  1. // Variables
  2. $AnimateHook: "animated";
  3. $AnimateDuration: 0.8s;
  4.  
  5. // Mixins
  6.  
  7. // Base Style
  8. .#{$AnimateHook} {
  9. -webkit-animation-duration: $AnimateDuration;
  10. animation-duration: $AnimateDuration;
  11. -webkit-animation-fill-mode: both;
  12. animation-fill-mode: both;
  13.  
  14. // Modifier for infinite repetition
  15. &.infinite {
  16. -webkit-animation-iteration-count: infinite;
  17. animation-iteration-count: infinite;
  18. }
  19.  
  20. }
  21.  
  22. // Slide
  23. @-webkit-keyframes slideInLeft {
  24. from {
  25. -webkit-transform: translate3d(-100%, 0, 0);
  26. transform: translate3d(-100%, 0, 0);
  27. visibility: visible;
  28. }
  29.  
  30. to {
  31. -webkit-transform: translate3d(0, 0, 0);
  32. transform: translate3d(0, 0, 0);
  33. }
  34.  
  35. }
  36.  
  37. @keyframes slideInLeft {
  38. from {
  39. -webkit-transform: translate3d(-100%, 0, 0);
  40. transform: translate3d(-100%, 0, 0);
  41. visibility: visible;
  42. }
  43.  
  44. to {
  45. -webkit-transform: translate3d(0, 0, 0);
  46. transform: translate3d(0, 0, 0);
  47. }
  48.  
  49. }
  50.  
  51. .slideInLeft {
  52. -webkit-animation-name: slideInLeft;
  53. animation-name: slideInLeft;
  54. }
  55.  
  56. @-webkit-keyframes slideInRight {
  57. from {
  58. -webkit-transform: translate3d(100%, 0, 0);
  59. transform: translate3d(100%, 0, 0);
  60. visibility: visible;
  61. }
  62.  
  63. to {
  64. -webkit-transform: translate3d(0, 0, 0);
  65. transform: translate3d(0, 0, 0);
  66. }
  67.  
  68. }
  69.  
  70. @keyframes slideInRight {
  71. from {
  72. -webkit-transform: translate3d(100%, 0, 0);
  73. transform: translate3d(100%, 0, 0);
  74. visibility: visible;
  75. }
  76.  
  77. to {
  78. -webkit-transform: translate3d(0, 0, 0);
  79. transform: translate3d(0, 0, 0);
  80. }
  81.  
  82. }
  83.  
  84. .slideInRight {
  85. -webkit-animation-name: slideInRight;
  86. animation-name: slideInRight;
  87. }
  88.  
  89. @-webkit-keyframes slideOutLeft {
  90. from {
  91. -webkit-transform: translate3d(0, 0, 0);
  92. transform: translate3d(0, 0, 0);
  93. }
  94.  
  95. to {
  96. visibility: hidden;
  97. -webkit-transform: translate3d(-100%, 0, 0);
  98. transform: translate3d(-100%, 0, 0);
  99. }
  100.  
  101. }
  102.  
  103. @keyframes slideOutLeft {
  104. from {
  105. -webkit-transform: translate3d(0, 0, 0);
  106. transform: translate3d(0, 0, 0);
  107. }
  108.  
  109. to {
  110. visibility: hidden;
  111. -webkit-transform: translate3d(-100%, 0, 0);
  112. transform: translate3d(-100%, 0, 0);
  113. }
  114.  
  115. }
  116.  
  117. .slideOutLeft {
  118. -webkit-animation-name: slideOutLeft;
  119. animation-name: slideOutLeft;
  120. }
  121.  
  122. @-webkit-keyframes slideOutRight {
  123. from {
  124. -webkit-transform: translate3d(0, 0, 0);
  125. transform: translate3d(0, 0, 0);
  126. }
  127.  
  128. to {
  129. visibility: hidden;
  130. -webkit-transform: translate3d(100%, 0, 0);
  131. transform: translate3d(100%, 0, 0);
  132. }
  133.  
  134. }
  135.  
  136. @keyframes slideOutRight {
  137. from {
  138. -webkit-transform: translate3d(0, 0, 0);
  139. transform: translate3d(0, 0, 0);
  140. }
  141.  
  142. to {
  143. visibility: hidden;
  144. -webkit-transform: translate3d(100%, 0, 0);
  145. transform: translate3d(100%, 0, 0);
  146. }
  147.  
  148. }
  149.  
  150. .slideOutRight {
  151. -webkit-animation-name: slideOutRight;
  152. animation-name: slideOutRight;
  153. }
  154.  
  155. @-webkit-keyframes inRight {
  156. 0% {
  157. -webkit-transform: translate3d(100%, 0, 0);
  158. transform: translate3d(100%, 0, 0)
  159. }
  160.  
  161. to {
  162. -webkit-transform: translateZ(0);
  163. transform: translateZ(0)
  164. }
  165.  
  166. }
  167.  
  168. @keyframes inRight {
  169. 0% {
  170. -webkit-transform: translate3d(100%, 0, 0);
  171. transform: translate3d(100%, 0, 0)
  172. }
  173.  
  174. to {
  175. -webkit-transform: translateZ(0);
  176. transform: translateZ(0)
  177. }
  178.  
  179. }
  180.  
  181. @-webkit-keyframes outLeft {
  182. 0% {
  183. -webkit-transform: translateZ(0);
  184. transform: translateZ(0)
  185. }
  186.  
  187. to {
  188. -webkit-transform: translate3d(100%, 0, 0);
  189. transform: translate3d(100%, 0, 0)
  190. }
  191.  
  192. }
  193.  
  194. @keyframes outLeft {
  195. 0% {
  196. -webkit-transform: translateZ(0);
  197. transform: translateZ(0)
  198. }
  199.  
  200. to {
  201. -webkit-transform: translate3d(100%, 0, 0);
  202. transform: translate3d(100%, 0, 0)
  203. }
  204.  
  205. }

定义进入与离开的动画过渡:

  1. .fade-enter-active,
  2. .fade-leave-active {
  3. transition: all .2s ease;
  4. }
  5.  
  6. .fade-enter,
  7. .fade-leave-active {
  8. opacity:;
  9. }
  10.  
  11. .view-in-enter-active,
  12. .view-out-leave-active {
  13. position: absolute;
  14. top:;
  15. width: 100%;
  16. padding-top: px2rem($titbarHeight);
  17. -webkit-animation-duration: .3s;
  18. animation-duration: .3s;
  19. -webkit-animation-fill-mode: both;
  20. animation-fill-mode: both;
  21. -webkit-backface-visibility: hidden;
  22. backface-visibility: hidden;
  23. }
  24.  
  25. .view-in-enter-active {
  26. -webkit-animation-name: inRight;
  27. animation-name: inRight;
  28. }
  29.  
  30. .view-out-leave-active {
  31. -webkit-animation-name: outLeft;
  32. animation-name: outLeft;
  33. }

基于Vue的页面切换左右滑动效果的更多相关文章

  1. Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)

    Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPager结合动画效果来实现仿Launcher以及页面切换的效果.源码地址在文章最后给出下载. 效果图如下:       1.Vi ...

  2. vue项目页面切换到默认显示顶部

    页面切换到默认显示顶部 方法一 使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样. vue-router 能做到,而且更好,它让你可以自定义路由切换时页 ...

  3. vue中使用better-scroll实现滑动效果

    1.安装:npm install better-scroll 2.引入:import BetterScrol from "better-scroll"; 1.滚动效果 better ...

  4. 实现页面切换(动画效果实现,不用ViewPager)

    源代码地址 http://download.csdn.net/detail/u013210620/8791687 先看主页面布局activity_main <?xml version=" ...

  5. 基于jquery实现页面loading加载效果

    实现loading 加载提示 ······ 透明遮罩 居中效果 具体代码如下: CSS样式部分: <style type="text/css"> .background ...

  6. Vue -- 项目报错整理(2):IE报错 - ‘SyntaxError:strict 模式下不允许一个属性有多个定义‘ ,基于vue element-ui页面跳转坑的解决

  7. Vue完成页面切换中加载数据

    created() { // 拿到路由传递来的car主键 let pk = this.$route.query.pk || this.$route.params.pk; // 主键不存在,就直接结束方 ...

  8. 基于Vue、Bootstrap的Tab形式的进度展示

    最近基于Vue.Bootstrap做了一个箭头样式的进度展示的单页应用,并且支持了对于一个本地JS文件的检索,通过这个单页应用,对于Vue的理解又深入了一些.在这里把主要的代码分享出来. 本单页应用实 ...

  9. Android之怎样实现滑动页面切换【Fragment】

    Fragment 页面切换不能滑动 所以对于listview 能够加入的左右滑动事件 .不会有冲突比如(QQ的好友列表的删除)  Fragment 和viewpager 的差别  Viewpager ...

随机推荐

  1. 关于HTTP协议头域详解

    HTTP1.1 请求头:消息头  Accept:text/html,image/*  告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1  告诉服务器,客户机采用的编 ...

  2. C#语言和SQL Server第十章笔记

    第十章 :使用关键字模糊查询 笔记 一:使用关键字 :LIKE  BETWEEN  IN进行模糊查询 通配符:  一类字符,代替一个或多个真正的字符 与LIKE关键字一起使用 通配符: 解释 实例 符 ...

  3. java 类方法和实例方法 以及 类变量和实例变量

    类体中的方法分为实例方法和类方法两种,用static修饰的是类方法 类方法: 对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址.从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通 ...

  4. Head First设计模式之单例模式

    一.定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. Singleton模式中的实例构造器可以设置为protecte ...

  5. [笔记]《JavaScript高级程序设计》- 最佳实践

    一.可维护性 1 什么是可维护的代码 可理解性--其他人可以接受代码并理解它的意图和一般途径,而无需原开发人员的完整解释. 直观性--代码中的东西一看就能明白,不管其操作过程多么复杂. 可适应性--代 ...

  6. Javascript中遍历数组方法的性能对比

    Javascript中常见的遍历数组的方法 1.for循环 for(var i = 0; i < arr.length; i++) { // do something. } 2.for循环的改进 ...

  7. Shell和命令基础

    什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解析器),Shell接收用户输入的命令并把它送入到内核去执行,结构如下图 Shell的功能 Shell最重要的 ...

  8. 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备

    在上一篇 分布式文件系统FastDFS如何做到高可用 中已经介绍了FastDFS的原理和怎么搭建一个简单的高可用的分布式文件系统及怎么访问. 高可用是实现了,但由于我们只设置了一个group,如果现在 ...

  9. 聚类之dbscan算法

    简要的说明: dbscan为一个密度聚类算法,无需指定聚类个数. python的简单实例: # coding:utf-8 from sklearn.cluster import DBSCAN impo ...

  10. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...