微信浏览器中,使用touchMove等事件时,会同时导致整个页面下拉显示网址问题解决!!

38 篇文章 0 订阅
15 篇文章 0 订阅

问题描述:

页面需要做一个上拉下拉的滑动效果,所以自己加了一些touchmove,touchstart,touchend等事件来控制。pc下效果都挺不错的,但是到了微信浏览器中,恶心的情况就来了:每次下拉的时候,都会导致微信浏览器整个页面下拉显示网址,同时由于这两个事件冲突导致下滑效果非常差。
在这里插入图片描述

问题分析过程:

先来一通疯狂百度再说。
在这里插入图片描述
结果查到的东西全是让禁用touchmove事件,还有一些高级点的加了一些判断,比如通过类名或者设置原型链上的某个属性值来判断是否阻止默认事件。

      document.body.addEventListener('touchmove', function (e) {
        e.preventDefault()
      }, { passive: false })

一一尝试之后,发现只要触发了touchmove事件,就一定会出现微信下拉显示网址的问题。
然后心态逐渐爆炸。在这里插入图片描述

下班回去睡一晚上后发现,我给body加了 e.preventDefault()之后,好像有点效果了,虽然我拖动箭头区域依然显示下拉网址,但是我拖动其他固定区域,并不会显示下拉网址了!!
在这里插入图片描述

说明 e.preventDefault()是关键。

不过中间又走了一些歪路,比如什么判断事件处于目标阶段再执行,判断元素类名上包含scroll才允许继续执行之类,因为之前一直认为下拉显示网址是因为微信浏览器里冒泡导致的,虽然我早就禁用了冒泡。
在这里插入图片描述
然而并没有什么用,依然是只要触发了touchmove就会显示下拉网址。

其实关键还是微信浏览器是如何来执行下拉显示网址这个操作,不是冒泡也不是捕获,而是微信浏览器对touchmove等事件进行了封装!里面肯定有某种机制,直接监听了事件,只要事件的默认事件执行,那么就会同时触发微信浏览器的下拉显示网址效果!!所以禁用冒泡和判断元素,判断类名根本没用!
为了验证这一猜想,输出一下微信浏览器中的事件,
在这里插入图片描述
可以看到,事件内容和chrome浏览器中的完全不一样:
在这里插入图片描述

问题解决:

因此,只要我禁用默认事件,那么就能中断事件机制的继续传达,避免微信浏览器下拉显示网址!
于是将代码改写一下,先执行自己写的相关js操作,确保自己写的滑动效果ok,然后马上阻住默认事件的传播!!:
在这里插入图片描述

打包,测试 ,效果OK !

—————更新线————————————————————————————————

兼容click事件

but,这样处理之后,点击事件却无法触发了。
研究后发现,touch事件是优先于click事件触发的,也就是说先触发touchstart,touchend,再触发click。
而我前面直接e.prevendDefault(),导致后面的touchend和click事件无法触发。
因此,这里还是通过类名做了一下判断(前面的弯路没有白走)

在这里插入图片描述
在touchstart事件和touchend事件中,判断一下类名中是否包含’click’,如果包含,就不阻止默认事件。
而touchmove事件中不要添加,否则又会导致下滑的时候触发了微信下拉网址!
最后测试,效果ok,能够同时存在click事件和滑动事件!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
h5 canvas在微信浏览器写字触发下拉是因为微信浏览器在手机端上具有一种称为"全面屏优化"的特性。当在微信浏览器使用h5 canvas进行绘图,特别是在绘制过程使用到了触摸事件,用户手指在画布上滑动,微信浏览器误将该操作视为页面下拉的手势操作。 这种误触下拉的原因在于微信浏览器为了适应手机全面屏的特性,引入了一种滑动操作的检测机制。当用户手指在页面上进行垂直滑动微信浏览器判断该滑动操作是否可以触发页面下拉的动作,以提升用户体验。 然而,在h5 canvas上绘制,绘图操作往往涉及到用户手指在画布上的触摸事件,用户手指的滑动被误判为页面下拉的手势操作,导致页面下拉,从而断了绘图的过程。 为了解决这个问题,可以尝试以下方法: 1. 在canvas元素上添加touchstart、touchmove、touchend等触摸事件监听器,并阻止事件冒泡或默认行为,以防止微信浏览器误判操作。 2. 可以使用第三方库或框架,如createjs、egret等,来实现画布绘制,这些库或框架通常对各种浏览器的兼容性问题进行处理,包括微信浏览器下的问题。 如果以上方法无法解决问题,那可能是由于微信浏览器的特性限制造成的,可以考虑使用其他浏览器或开发移动端应用程序来实现画布绘制,以避免微信浏览器下拉误触问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值