前言

现在移动端交互上越来越追求原生体验,最近做的App刚好需要做页面转场效果,类似微信的切换效果。

Vue2.0中transition组件的使用

Vue2.0提供了transition组件供我们使用,我们可以将页面嵌套到transition组件中,实现转场效果。在进入/离开的过渡中,会有6个class切换。

  • v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
  • v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。
  • v-enter-to: 定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
  • v-leave: 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
  • v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。
  • v-leave-to: 定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。

了解了以上状态之后,实际应用中我们只需要用到v-enter-activev-leave-active

App.vue

<div id="app" ><transition :name="transitionName"><router-view/></transition>
</div>
复制代码

定义slide-left,slide-right两种状态,分别表示页面向左滑动和向右滑动,即前进和后退的转场效果。

common.scss

.slide-left-enter-active {animation-name: slide-left-in;animation-duration: .3s;
}
.slide-left-leave-active {animation-name: slide-left-out;animation-duration: .3s;
}
.slide-right-enter-active {animation-name: slide-right-in;animation-duration: .3s;
}
.slide-right-leave-active {animation-name: slide-right-out;animation-duration: .3s;
}@keyframes slide-left-in {0% {transform: translate3d(100%, 0, 0);}100% {transform: translate3d(0, 0, 0);}
}@keyframes slide-left-out {0% {transform: translate3d(0, 0, 0);}100% {transform: translate3d(-100%, 0, 0);}
}@keyframes slide-right-in{0% {transform: translate3d(-100%, 0, 0);}100% {transform: translate3d(0, 0, 0);}
}
@keyframes slide-right-out  {0% {transform: translate3d(0, 0, 0);}100% {transform: translate3d(100%, 0, 0);}
}
复制代码

监听$route实现页面切换动画

在使用vue-router的应用中,路由对象都会被注入到每个组件中,可以通过this.$route获取当前的路由对象。页面切换的难点就在于,如何判断页面前进还是后退,看以下代码。

App.vue

watch: {// 监听路由切换转场动画$route(to, from) {const routeDeep = ['/', '/team', '/judge', '/finish', '/noData', '/info']const toDepth = routeDeep.indexOf(to.path)const fromDepth = routeDeep.indexOf(from.path)this.transitionName = toDepth > fromDepth ? 'slide-left' : 'slide-right'}
}
复制代码

在单页应用中,可以根据页面的层级定义出routeDeep,比如info页面就是属于二级页面,排在最后,其他为一级页面。当页面从一级跳转到二级,采用前进动画,二级跳转到一级,采用后退动画。暂不考虑复杂的嵌套页面的情况。

结语

代码创造世界,世界属于三体。后会有期。

Vue实现仿微信,如飘柔般顺滑的页面转场动画相关推荐

  1. uniapp可以封装组件嘛_uniapp聊天App实例|vue+uniapp仿微信界面|红包|朋友圈

    一.功能阐述 今天给大家分享的是基于UniApp+Vue+Vuex+swiper+uniPop等技术开发的仿微信原生App聊天室|仿微信聊天界面实例项目uniapp-chatroom,实现了发送图文消 ...

  2. vue+vant仿微信聊天画面做了个点击按钮出现土味情话的界面

    最近在学习框架vue,不得不说vue确实上手快,但用的vant组件库里找了老半天都没找到聊天框样式的组件,啧,实在想用,就自己搭了个,其实就这个气泡框的角花了点时间,用到了伪元素类. 效果图如下: 直 ...

  3. vue+h5仿微信网页版聊天室vueWebChat项目

    很早之前就有使用html5技术开发过一个web版仿微信.微博聊天,后来想着用vue技术开发一版,后面由于各种事情,一直没能落定.最近有些空闲就使用vue开发了一个vueWechat聊天室IM项目. 基 ...

  4. vue + element-ui 聊天_vue网页版聊天Vue+ElementUI仿微信界面聊天实例

    vue+vuex+vue-cli+vue-router+element-ui+swiper等技术开发仿微信pc端界面聊天应用,实现了发送消息+表情(动图gif).图片/视频预览.右键长按菜单.红包/朋 ...

  5. 用离屏canvas制作仿Prezi页面转场动画特效

    用离屏canvas制作网站页面特效.仿Prezi转场特效 首屏效果 页面切换转场效果 · 首屏圆形循环扩散效果 首屏效果的难点在于圆形循环扩散动画和贝塞尔曲线的绘制.圆形逐渐扩大的动画并不难,关键在于 ...

  6. vue.js仿微信聊天窗口展示组件

    原链接:https://www.jianshu.com/p/0faf8e78d0a5 源码:https://github.com/doterlin/vue-wxChat 演示地址:https://do ...

  7. AS作业三仿微信APP实现对有recycleView的页面进行点击跳转设计

    RecycleView是Android5.0推出的,它用来代替ListView和GridView,并且能够实现瀑布流中的布局,更加高级并且更加灵活,提供更为高效的回收复用机制,同时实现管理和视图的解耦 ...

  8. vue仿微博评论回复_vue 网页版聊天系统|仿微信、微博网页端

    最近一段时间一直在学习vue框架,对比了下react和angular发现vue上手快多了,之前有使用vue开发个vue版仿微信手机端IM聊天,最近想继续加强学习下,就做了一版网页端的vue聊天室. 依 ...

  9. nuxt-chat聊天室|vue仿微信/探探界面nuxt+vue+vuex|朋友圈

    Nuxt-Chatroom 基于Nuxt.js+Vue.js仿微信|探探App界面聊天社交 运用nuxt.js+vue.js+vuex+vpopup+vant+webpack等技术架构开发的社交聊天室 ...

最新文章

  1. Java实现SSH模式加密
  2. 动态多维数组在 VC 中的应用
  3. 计算机网络-TCP协议
  4. 树莓派2代B model 上手初体验,不用显示器,Python GPIO 点亮一颗LED
  5. Python快速学习07:文本文件的操作
  6. GIT界的神探--bisect
  7. 武警五防一体化是什么?五防光端机产品介绍!
  8. mysql update多个字段_常见的MySQL命令大全fourth
  9. 商厂里调货拿包包程序
  10. 德银病危:心比天高,却落下黄粱一梦
  11. 卷组删除pv_LVM 移除PV步骤
  12. .net接入微信二维码支付(模式二)
  13. ip地址为61.179.150.39/28,问其子网号为多少,广播号为多少,可用ip地址范围是多少
  14. 降息为什么会导致货币贬值呢,为啥货币贬值利于出口
  15. 值得珍藏的免费观影网站
  16. KY122 找出直系亲属
  17. Linux 入门基本操作
  18. 编译原理实验:Java实现SLR(1)语法分析器
  19. Mysql主从同步报错解决:Error executing row event: Table zabbix.history-uint doesnt exist
  20. python列表中的元素可以是不同类型_Python列表中所有元素必须为相同类型的数据。...

热门文章

  1. 「Activiti精品 悟纤出品」核心类以及如何在SpringBoot集成说明 - 第328篇
  2. L1-5 试试手气(c++、数组)
  3. EFM32芯片被锁解决方法
  4. java jcr使用_java – 什么时候使用JCR(内容存储库)超过其他选项?
  5. Visio中图形关于轴线对称
  6. Java 入门到精通的过程
  7. 【单片机毕业设计】【mcuclub-jj-050】基于单片机的门禁的设计
  8. 懒惰型性格分析,如何改变懒惰型性格?
  9. gitlab日常使用命令
  10. 以java语言为工具的粗糙的飞机大战游戏的开发与实现