IOS手机侧滑返回与Vue过渡动画冲突

前端小白一个,最近做的一个Vue项目用到了Vue的过度动画,本来效果挺好的突然发现在IOS手机上项目本身使用的Vue过度动画与IOS侧滑发生冲突,出现了侧滑效果与Vue过度动画重复执行导致页面切换效果不理想。

思路:
两个动画效果肯定是要停掉一个的,禁止掉原生侧滑有点不现实,那就想办法改变我们自己的。

定义变量isIosMoveBack判断过度动画取消的时机(在IOS系统机型下滑动时),这里直接在vuex里面定义个变量,方便后面组件内部的返回按钮重置变量

store > state

	isIosMoveBack: false

store > mutations

	setIsIosMoveBack (state, param) {
        state.isIosMoveBack = param
    }
app.vue页面
computed: {
      isIosMoveBack() {
        return this.$store.state.isIosMoveBack
      }
    }

监听滑动事件改变变量isIosMoveBack

mounted() {
	// getDeviceType函数为判断机型(IOS时返回true)
	if (this.getDeviceType()){
	   document.body.addEventListener('touchmove', () => {
	      this.$store.commit('setIsIosMoveBack', true)
	   }, false)
	}
}

Vue路由过渡动画的监听判断

watch: {
      $route(to, from) {
          if (this.isIosMoveBack) {
              this.transitionName = ''
              this.$store.commit('setIsIosMoveBack', false)
            } else {
                if(to.meta.index > from.meta.index){
                    this.transitionName = 'slide-left'
                }else if(to.meta.index < from.meta.index){
                    this.transitionName = 'slide-right'
                }else{
                    this.transitionName = ''
                }
            }
        }
    },

到此,还没结束--------还有个问题(项目自身返回按钮需要重置变量),前面只是监听了touchmove,那任何在路由跳转前的滑动效果都会被监听,也就是说任何返回操作前this.isIosMoveBack都可能为true(除了侧滑,其他的返回操作仍然是需要Vue过渡动画)
在这里插入图片描述

组件header.vue

如上图:需要在点击返回时重置isIosMoveBack值,在组件中重置store中的变量this.$store.commit('setIsIosMoveBack', false)

back () {
     this.$store.commit('setIsIosMoveBack', false) // 重置变量isIosMoveBack
      if (this.backRouter) {
        this.$router.push(this.backRouter)
      } else if (this.isBackHandle) {
        this.$emit('backHandle')
      } else {
        this.$router.go(-1)
      }
},

结束! 基本上解决了ios与Vue过渡动画的冲突问题,感觉方法还是不太好,各路大神有咩有好方法呀让小弟我借鉴借鉴😅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值