被动事件监听器是一种新兴的网络标准,是Chrome 51附带的一项新功能,可以极大地提高滚动性能。Chrome发行说明。
通过消除滚动以阻止触摸和滚轮事件监听器的需要,开发人员可以选择加入以提高滚动性能。
问题:所有现代浏览器都具有线程化滚动功能,即使在运行昂贵的JavaScript时,滚动操作也可以平稳运行,但是这种优化由于需要等待任何touchstart
和touchmove
处理程序的结果而被部分挫败,这可能会通过调用来完全阻止滚动preventDefault()
在事件上。
解: {passive: true}
通过将触摸或滚轮侦听器标记为被动,开发人员保证处理程序不会调用preventDefault
以禁用滚动。This frees the browser up to respond to scrolling immediately without waiting for JavaScript, thus ensuring a reliably smooth scrolling experience for the user
。
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 Spec , 演示视频 ,解释文档