Vue路由切换时的左滑和右滑效果示例

如何实现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

以上是 Vue路由切换时的左滑和右滑效果示例 的全部内容, 来源链接: utcz.com/z/344583.html

回到顶部