项目中需要实现的一个需求是顶部有一个tab选择框,点选某一个tab的时候切换页面,并且支持手势滑动,左滑右滑可以同点选tab一样切换页面。
根据项目中选用的ui组件cube-ui为基准查看了一下可实现的方案,比如可以直接用swipe或者是slide实现,但根据之前的实现方案来看,多少都会有些问题,尤其是在页面嵌套了很多层的垂直和水平滚动的情况下,会让滚动很不流畅。
于是选用了移动端的touch事件,整个功能就是监听页面touchstart,touchmove,touchend这三个事件来做的。
首先页面结构如下:
<div class="home-main flex-1" @touchstart.capture='touchStart' @touchmove.capture="touchMove" @touchend.capture='touchEnd'>
<transition :name="transitionName" mode="out-in">
<keep-alive>
<router-view/>
</keep-alive>
</transition>
</div>
在router-view里面就是需要进行切换的页面,页面切换不能太生硬需要加入动画,并且左滑右滑的动画效果是不一样的。
那么接下来就是滑动样式:
.slide-right-enter-active {
transition: all .8s ease;
}
.slide-right-leave-active {
transition: all .3s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-right-enter {
opacity: 0;
transform: translateX(-100%);
}
.slide-right-leave-to {
opacity: 0;
transform: translateX(100%);
}
.slide-left-enter-active {
transition: all .8s ease;
}
.slide-left-leave-active {
transition: all .3s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.