js 禁止移动端H5页面默认下拉(左右滑动引起的物理返回也可同时禁止) 您所在的位置:网站首页 h5页面的左右滑动事件 js 禁止移动端H5页面默认下拉(左右滑动引起的物理返回也可同时禁止)

js 禁止移动端H5页面默认下拉(左右滑动引起的物理返回也可同时禁止)

2024-03-19 16:47| 来源: 网络整理| 查看: 265

1.问题 移动端页面滚动不仅滚动了希望滚动的部分,整体的页面也跟者上下滚动,整个页面非常卡顿。 控制台打印如下警告: [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. 2. 解决方法 阻止touchmove默认事件,页面不再滚动 在touch的事件监听方法上绑定第三个参数{ passive: false } 通过传递 passive 为 false 来明确告诉浏览器:事件处理程序调用 e.preventDefault() 来阻止默认滑动行为。 document.body.addEventListener('touchmove', function (e) { e.preventDefault() }, { passive: false }) 在需要的时候可以选择恢复touchmove默认事件,继续滚动页面 removeEventListener() 方法用于移除由addEventListener()方法添加的事件句柄。 document.body.removeEventLister("touchmove") 3.addEventListener()方法 target.addEventListener(type, listener, options); target.addEventListener(type, listener, { capture: false, //捕获 passive: false, once: false //只触发一次 })

options 对象可用的三个属性都是布尔类型的开关。其中 capture 属性等价于以前的 useCapture 参数;once 属性就是表明该监听器是一次性的,执行一次后就被自动 removeEventListener 掉。

4.passive的作用

passive主要用于优化浏览器页面滚动的性能,让页面滚动更顺滑

浏览器的默认行为,它可以被e.preventDefault()阻止 浏览器touchmove事件的默认行为是什么呢,通常来说就是滚动当前页面(还可能是缩放页面),如果它的默认行为被阻止了,页面就必须静止不动。 但浏览器无法预先知道一个监听器会不会调用 e.preventDefault(),它能做的只有等监听器执行完后再去执行默认行为,而监听器执行是要耗时的,有些甚至耗时很明显,这样就会导致页面卡顿。 有 80% 的滚动事件监听器是不会阻止默认行为的,也就是说大部分情况下,浏览器是白等了。所以,passive 监听器诞生了,passive 的意思是“顺从的”,表示浏览器顺从事件的默认行为,浏览器知道了一个监听器是 passive 的,浏览器就可以在两个线程里同时执行监听器中的 JavaScript 代码和浏览器的默认行为了。 我们可以通过传递 passive 为 true 来明确告诉浏览器顺从事件的默认行为,(事件处理程序不会调用 e.preventDefault() 来阻止默认滑动行为),浏览器就不会等待事件处理函数执行完成再执行滚动,即使滚动事件里面写一个死循环,浏览器也能够正常处理页面的滑动 passive 为 false 会告诉浏览器阻止事件的默认行为,事件处理程序会调用e.preventDefault()阻止页面默认滑动行为


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有