阻挠微信浏览器下拉滑动结果(ios11.3 橡皮筋结果)

在升级到 ios11.3 体系后,发明之前阻挠页面转动的代码e.preventDefault代码失效了。因而本身折腾了一番,找到了解决办法,分享给人人。

一、媒介

浏览器在挪动端有一个默许触摸转动的结果,让我们感想最深的莫过于微信浏览器内里,下拉时自带橡皮筋的结果。

然而在开辟的时刻我们常常须要阻挠此结果。

在此先直接给一个计划,直接加上下面的代码即可:

document.body.addEventListener('touchmove', function (e) {
  e.preventDefault(); //阻挠默许的处理方式(阻挠下拉滑动的结果)
}, {passive: false}); //passive 参数不能省略,用来兼容ios和android

假如不加passive:false,在 ios 上是不能起作用的。

二、诠释

微信在 Android 端和 IOS 端运用的不是一样的浏览器内核:

  • Android 版 微信浏览器 :QQ浏览器 X5内核(相当于运用的 Chrome)
  • IOS 版 微信浏览器 :WKWebView(相当于运用的Safari)

所以下面离别运用 Chrome 和 Safari 来剖析。

关于浏览器内核题目,有兴致的能够看看这个:
浏览器内核总结

1. Chrome 默许的事宜监听参数:

《阻挠微信浏览器下拉滑动结果(ios11.3 橡皮筋结果)》

useCapture:false 示意事宜采纳冒泡机制(capture 译为 捕捉),浏览器默许就是false;
passive:false 示意我如今主动通知浏览器该监听器将运用e.preventDefault()来阻挠浏览器默许的转动行动(能够进步运转速率)。

2. Safari 默许的事宜监听参数:

在 Safari 中,有一个更新

Updated root document touch event listeners to use passive mode improving scrolling performance and reducing crashes

更新了根文档触摸事宜侦听器,默许运用
passive:true进步转动机能并削减崩溃

所以Safari 中默许运用了passive:true,通知浏览器,此监听事宜中,不会阻挠默许的页面转动。这将致使设置的e.preventDefault()代码失效。

所以 Safari 默许是不会阻挠转动的。

3. 结论

我们经由过程 e.preventDefault(); 阻挠默许的下拉滑动的结果,经由过程增加 passive:false 参数来兼容各个浏览器。即可完成阻挠挪动页面转动的功用。

三、关于 passive 参数

关于 passive 在事宜监听中的作用,引荐人人看这篇文章:passive 的事宜监听器

    原文作者:Developer
    原文地址: https://segmentfault.com/a/1190000014134234
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞