在努力提高渐进式web应用程序的性能时,我遇到了一个新功能被动事件监听器,我发现很难理解这个概念。
什么是被动事件监听器,在我们的项目中有什么需要?
在努力提高渐进式web应用程序的性能时,我遇到了一个新功能被动事件监听器,我发现很难理解这个概念。
什么是被动事件监听器,在我们的项目中有什么需要?
当前回答
被动事件监听器是一个新兴的网络标准,新特性 Chrome 51提供了一个重要的潜在推动滚动 的性能。Chrome发布说明。
它使开发人员能够选择更好的滚动性能,消除了在触摸和车轮事件侦听器上滚动来阻止的需要。
问题:所有现代浏览器都有一个线程滚动特性,即使在运行昂贵的JavaScript时也可以平滑地运行滚动,但这种优化在一定程度上是失败的,因为需要等待任何touchstart和touchmove处理程序的结果,这可能会通过在事件上调用preventDefault()来完全阻止滚动。
解决方案:{passive: true}
通过将触摸或滚轮监听器标记为被动,开发人员承诺处理程序不会调用preventDefault来禁用滚动。这使得浏览器可以立即响应滚动,而无需等待JavaScript,从而确保为用户提供可靠流畅的滚动体验。
document.addEventListener("touchstart", function(e) {
console.log(e.defaultPrevented); // will be false
e.preventDefault(); // does nothing since the listener is passive
console.log(e.defaultPrevented); // still false
}, Modernizr.passiveeventlisteners ? {passive: true} : false);
DOM规范,演示视频,解释器文件
其他回答
被动事件监听器是一个新兴的网络标准,新特性 Chrome 51提供了一个重要的潜在推动滚动 的性能。Chrome发布说明。
它使开发人员能够选择更好的滚动性能,消除了在触摸和车轮事件侦听器上滚动来阻止的需要。
问题:所有现代浏览器都有一个线程滚动特性,即使在运行昂贵的JavaScript时也可以平滑地运行滚动,但这种优化在一定程度上是失败的,因为需要等待任何touchstart和touchmove处理程序的结果,这可能会通过在事件上调用preventDefault()来完全阻止滚动。
解决方案:{passive: true}
通过将触摸或滚轮监听器标记为被动,开发人员承诺处理程序不会调用preventDefault来禁用滚动。这使得浏览器可以立即响应滚动,而无需等待JavaScript,从而确保为用户提供可靠流畅的滚动体验。
document.addEventListener("touchstart", function(e) {
console.log(e.defaultPrevented); // will be false
e.preventDefault(); // does nothing since the listener is passive
console.log(e.defaultPrevented); // still false
}, Modernizr.passiveeventlisteners ? {passive: true} : false);
DOM规范,演示视频,解释器文件