• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

基于Vue实现页面切换左右滑动效果

vue 搞代码 4年前 (2022-01-08) 19次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了基于Vue实现页面切换左右滑动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

基于Vue的页面切换左右滑动效果,具体内容如下

HTML文本页面:

  <div>  <!--动态获得transition 的name值--></div>

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

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

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

 computed: { direction () { const viewDir = this.$store.state.viewDirection let tranName = '' if (viewDir === 'left') { tranName = 'view-out' } else if (viewDir === 'right') { tranName = 'view-in' } else { tranName = 'fade' } return tranName }, }, 

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

待定义引入样式文件:

 // Variables $AnimateHook: "animated"; $AnimateDuration: 0.8s; // Mixins // Base Style .#{$AnimateHook} { -webkit-animation-duration: $AnimateDuration; animation-duration: $AnimateDuration; -webkit-animation-fill-mode: both; animation-fill-mode: both; // Modifier for infinite repetition &.infinite { -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; } } // Slide @-webkit-keyframes slideInLeft { from { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); visibility: visible; } to { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } @keyframes slideInLeft { from { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); visibility: visible; } to { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } .slideInLeft { -webkit-animation-name: slideInLeft; animation-name: slideInLeft; } @-webkit-keyframes slideInRight { from { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); visibility: visible; } to { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } @keyframes slideInRight { from { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); visibility: visible; } to { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } } .slideInRight { -webkit-animation-name: slideInRight; animation-name: slideInRight; } @-webkit-keyframes slideOutLeft { from { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } to { visibility: hidden; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } @keyframes slideOutLeft { from { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } to { visibility: hidden; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } .slideOutLeft { -webkit-animation-name: slideOutLeft; animation-name: slideOutLeft; } @-webkit-keyframes slideOutRight { from { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } to { visibility: hidden; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } @keyframes slideOutRight { from { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } to { visibility: hidden; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } .slideOutRight { -webkit-animation-name: slideOutRight; animation-name: slideOutRight; } @-webkit-keyframes inRight { 0% { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0) } to { -webkit-transform: translateZ(0); transform: translateZ(0) } } @keyframes inRight { 0% { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0) } to { -webkit-transform: translateZ(0); transform: translateZ(0) } } @-webkit-keyframes outLeft { 0% { -webkit-transform: translateZ(0); transform: translateZ(0) } to { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0) } } @keyframes outLeft { 0% { -webkit-transform: translateZ(0); tr<p style="color:transparent">本文来源gao!daima.com搞$代!码网</p>ansform: translateZ(0) } to { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0) } } 

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

 .fade-enter-active, .fade-leave-active { transition: all .2s ease; } .fade-enter, .fade-leave-active { opacity: 0; } .view-in-enter-active, .view-out-leave-active { position: absolute; top: 0; width: 100%; padding-top: px2rem($titbarHeight); -webkit-animation-duration: .3s; animation-duration: .3s; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-backface-visibility: hidden; backface-visibility: hidden; } .view-in-enter-active { -webkit-animation-name: inRight; animation-name: inRight; } .view-out-leave-active { -webkit-animation-name: outLeft; animation-name: outLeft; } 

以上就是基于Vue实现页面切换左右滑动效果的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:基于Vue实现页面切换左右滑动效果

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址