使用 addeventlistener 时传入 { passive: true } 可告知浏览器事件处理器不会调用 preventdefault(),从而优化 touchmove、scroll 等事件的滚动性能;若误在 passive: true 中调用 preventdefault() 会触发警告且无效。

在 JavaScript 中,使用 addEventListener 传递 options 对象绑定被动监听(passive listener),核心是将 { passive: true } 作为第三个参数传入,告诉浏览器该事件处理器**不会调用 preventDefault()**,从而允许浏览器对滚动、触摸等事件进行底层优化(比如更流畅的滚动)。
为什么需要 passive: true
在移动端或支持触控的设备上,touchstart 和 touchmove 等事件默认会阻塞滚动行为,直到浏览器确认监听器是否调用了 preventDefault() —— 这个等待过程会导致滚动卡顿。设置 passive: true 明确告知浏览器:“我绝不会调用 preventDefault()”,浏览器就能立即响应滚动,提升性能。
基本写法示例
直接传入 options 对象:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
element.addEventListener('touchmove', handleTouchMove, { passive: true });
也可以同时启用其他选项,比如:
element.addEventListener('scroll', handleScroll, {
passive: true,
capture: false,
once: false
});
常见错误与注意事项
-
不能在 passive: true 的监听器里调用 preventDefault():否则浏览器会抛出警告(Chrome/Firefox 中可见),且调用无效;如需阻止默认行为,请改用
{ passive: false }(注意:这是默认值,可省略) -
不是所有事件都支持 passive:主要用于
touchstart、touchmove、wheel、scroll、mousewheel等可能影响滚动/输入流的事件;对click、keydown等无影响 - 兼容性没问题:现代浏览器(Chrome 56+、Firefox 49+、Safari 11.1+、Edge 79+)均支持;旧版可通过特性检测安全降级
安全写法(带特性检测)
避免在不支持的环境中报错,推荐这样封装:
const opts = typeof AddEventListenerOptions !== 'undefined'
? { passive: true }
: false; // 旧浏览器不支持 options,传 false 相当于不传
element.addEventListener('touchmove', handleTouchMove, opts);Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










