addEventListener 的 once 选项在什么实际场景下有用?它和手动 removeEventListener 有何不同?
围绕“addEventListener 的 once 选项在什么实际场景下有用?它和手动 removeEventListe”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明自动移除与手动移除的等价性,以及用于一次性初始化、自毁监听器。
浏览器 · 事件系统面试题第 1 页,显示第 1–42 题,共找到 42 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“addEventListener 的 once 选项在什么实际场景下有用?它和手动 removeEventListe”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明自动移除与手动移除的等价性,以及用于一次性初始化、自毁监听器。
本文说明捕获阶段监听器的具体使用场景,包括全局拦截、调试和不冒泡事件的委托,并区分捕获与冒泡的适用边界,给出实际示例。
围绕“click 事件对象中 clientX、pageX、screenX 分别代表什么坐标系?在实现悬浮提示时常用哪个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明相对于视口、文档、屏幕的不同,以及 pageX 在滚动时仍相对于文档。
围绕“click 事件与 mousedown/mouseup 组合事件在触发时机和场景上有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 click 要求同元素上按下与释放,且触发顺序,以及拖拽场景下 click 不触发。
围绕“getCoalescedEvents 在 pointermove 事件中返回什么?它为什么能提升绘图应用的帧率”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释浏览器合并高频移动事件成组,以及用该 API 可获取中间点以补平线条。
围绕“如何拦截浏览器右键菜单并弹出自定义菜单?应监听哪个事件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明监听 contextmenu 并 preventDefault,以及区分右键和触屏长按。
围绕“CustomEvent 与普通 Event 有何不同?如何用它在组件间传递自定义数据”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可以使用 detail 携带数据,以及构造函数中 bubbles/cancelable 设置。
围绕“双击一个元素时,会触发哪些鼠标事件?顺序如何”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出 mousedown/mouseup/click/mousedown/mouseup/click/dblclick 的顺序(基于。
围绕“如何从一个事件对象判断是否已有其他监听器调用了 preventDefault()”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 defaultPrevented 属性的用法及只读。
本文详述事件委托解决动态元素监听问题的具体实现:说明冒泡机制中事件流到达父级,以 event.target 为判断入口;给出 mouseenter、blur 等不可冒泡事件作为反例,并纠正动态元素无需重新绑定的误读及实际使用中需注意的细节。
本题解释事件委托失效的原因:非冒泡事件不沿 DOM 树向上传播。典型例子包括 scroll、blur/focus、mouseenter/leave、load。并说明可通过捕获阶段监听或使用 focusin/focusout 等替代方案。
围绕“dispatchEvent 是同步派发还是异步派发?在监听器中修改 DOM 会立即反映吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明调用 dispatchEvent 后所有监听器立即同步执行,且事件循环可以嵌套。
围绕“在 Shadow DOM 中事件从内部元素穿透边界派发到外部时,event.composed 和 composedP”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 composed 属性决定是否能够穿过 shadow root,以及 composedPath 返回完整路径。
围绕“浏览器在派发事件时是创建新 Event 对象还是复用同一个?对监听器有什么潜在影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明每个事件派发都会创建新对象(除非手动复用),但事件循环中变量引用可能失效。
围绕“addEventListener 的 signal 选项如何帮助自动移除监听器?实现 AB 测试或一次性订阅时有用吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明传入 AbortSignal,当 abort 时自动移除监听器,适用于可取消操作。
围绕“focus 和 blur 事件不冒泡,为何仍能通过事件委托实现,但必须使用捕获”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 focus/blur 不冒泡但可捕获,因此将监听器放在父级 capture:true 可捕获。
围绕“focusin/focusout 事件与 focus/blur 事件在冒泡行为上有何差异?在表单校验中如何选择”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 focusin/focusout 冒泡(但非标准被广泛支持),以及委托时优先使用 focusin。
围绕“KeyboardEvent.key 和 KeyboardEvent.code 分别表示什么?在什么场景下应使用 co”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分输出字符与物理键位置,以及在非美式键盘或游戏中使用 code。
围绕“如何阻止空格键或方向键触发页面滚动,同时保留输入框内的默认行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 keydown 事件中调用 preventDefault 即可阻止滚动,但需判断输入框等焦点以保留默认按键。
围绕“为网页实现自定义键盘快捷键如 Ctrl+S 保存,如何确保不触发浏览器默认保存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明监听 keydown,检查 ctrlKey/metaKey 与 key,调用 preventDefault 以屏蔽默认,但需注意。
围绕“键盘按住不放时 keydown 事件重复触发,如何利用 event.repeat 属性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按住按键产生多个 keydown 且 repeat=true,用于过滤长按连发。
围绕“keydown 事件与已废弃的 keypress 事件有何区别?为什么推荐用 keydown”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 keypress 只针对可打印字符且不区分 Shift,已废弃;推荐用 keydown+key 属性。
围绕“mouseenter 与 mouseover 在冒泡行为和对子元素的触发上有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 mouseover 冒泡且进入子元素会再次触发,mouseenter 不冒泡且进入子元素不触发。
围绕“在 mousedown 事件中,如何区分左键、中键和右键?对应的 button 值是多少”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出 0/1/2 对应主/辅助/次按钮,以及 buttons 多键状态。
围绕“mouseleave 事件不冒泡,那么要实现鼠标离开一组子元素的统一处理,可以使用什么替代方案”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明用 mouseout 配合 relatedTarget 或监听 mouseleave 于父级(不冒泡但捕获不可用),或使用 po。
围绕“Pointer Events 与 Mouse Events 相比有哪些优势?在处理触摸设备时为何推荐使用前者”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明统一鼠标/触摸/笔、支持多点触控、pointerdown/up 捕获及悬停。
围绕“在处理单指触摸时,使用 Pointer Events 与 Touch Events 有何区别?哪种更适合跨设备”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比统一性、支持触控点、事件对象特性和浏览器兼容,并推荐 Pointer;不扩展到鼠标兼容。
围绕“哪些情况会触发 pointercancel 事件?实现拖拽时为何需要监听它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出浏览器接管、触摸滚动、移动点击等,并说明在拖拽中清除状态。
围绕“setPointerCapture 有什么作用?何时需要手动释放?给出一个拖拽实现的典型用法”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明将后续指针事件重定向到指定元素直到释放,以及仅在 pointerdown 等调用,release 或不需显式(自动释放)。
本文解释如何用 preventDefault 阻止滚轮引起的页面滚动,同时保留自定义行为;重点说明 passive 选项的影响、滚动动画管理、负滚动链及 wheel 事件可取消性的注意事项。
本题解析 addEventListener 回调中 return false 与调用 preventDefault() 的本质区别,说明 return false 仅对 on-event 处理器有效,不适用于 addEventListener,并给出正确实践。
讲清 DOM 事件捕获、目标、冒泡三阶段的先后次序与监听器触发时机,说明目标元素上两类监听器都触发这一细节,并给出判断当前阶段的 eventPhase 用法与常见误区。
围绕“同一元素上绑定多个相同类型事件,两个监听器的触发顺序如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按添加顺序触发,且捕获/冒泡阶段不同层级才有抢跑;不能依赖顺序时如何用 once/特定选项。
围绕“scroll 事件本身不冒泡,如何在不给每个滚动容器绑定监听器的情况下统一管理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可以通过捕获阶段监听 document 或 window,以及如何使用 scroll event 的 capture。
围绕“scroll 事件触发非常频繁,如何有效地控制处理频率?请对比 rAF、timeout 和 passive 的配合”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较 rAF 与防抖节流在滚动中的差异,以及 passive 保证不被阻塞。
围绕“scrollend 事件与 scroll 事件有何不同?在处理“停止滚动后执行操作”时如何利用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 scrollend 在所有滚动手势结束后触发,而 scroll 持续触发。
本题对比 stopPropagation() 与 stopImmediatePropagation():前者允许同元素其他监听器执行完再停止传播,后者立即终止同元素剩余监听器并停止传播,文中给出模拟分发代码、适用场景与失效边界。
围绕“如何手动创建并派发一个冒泡的 ClickEvent?有哪些属性需要设置”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 new Event('click', {bubbles:true})、派发目标及构造函数中可设置的 cancelable。
本文用父子列表事件说明 event.target 与 event.currentTarget 的本质区别,解释事件委托中为何用 target 判断来源,并提醒 currentTarget 在异步回调中失效的边界。阅读后可避免常见误判,正确编写委托代码。
围绕“CSS 属性 touch-action 如何影响 touch 事件的默认行为?与使用 preventDefault ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 touch-action 可在手势开始前声明禁止滚动/缩放手势,防止延迟,而 JS preventDefault 只能之后取消。
围绕“TouchEvent 中 touches、targetTouches、changedTouches 三个列表的区别是”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明各自含义:当前所有触点、目标元素上的、发生变化的;在 touchend 中只能用 changedTouches 获取消失的点。
围绕“什么情况下会触发 touchcancel?在实现自定义滑动手势时为何要处理它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列举系统中断、来电、浏览器接管滚动等,并强调清除手势状态。