javascript高级程序设计2020

  1. 把事件处理程序注册到捕获阶段通常用于在事件到达其指定目标之前拦截事件。
  2. addHandler()和 removeHandler()方法并没有解决所有跨浏览器一致性问题,比如 IE的作用域问题、多个事件处理程序执行顺序问题
  3. 只要可行,就应该考虑只给 document 添加一个事件处理程序,通过它处理页面中所有某种类型的

事件。最适合使用事件委托的事件包括:click、mousedown、mouseup、keydown 和 keypress。
mouseover 和 mouseout 事件冒泡,但很难适当处理,且经常需要计算元素位置(因为 mouseout 会
在光标从一个元素移动到它的一个后代节点以及移出元素之外时触发)。

  1. 很多 Web 应用性能不佳都是由于无用的事件处理程序长驻内存导致的
  2. 元素上设置 innerHTML 会完全删除按钮,但事件处理程序仍然挂在按钮上面。
    1. document.addEventListener() {
    2. event.defaultPrevented;
    3. // 如果有多个相同类型事件的事件监听函数绑定到同一个元素,当该类型的事件触发时,
    4. // 它们会按照被添加的顺序执行。如果其中某个监听函数执行了 event.stopImmediatePropagation() 方法,
    5. // 则当前元素剩下的监听函数将不会被执行。
    6. event.stopImmediatePropagation;
    7. event.trusted;
    8. }
    image.png
    image.png

事件管理器及自定义事件

  1. 设计模式发布订阅
  2. nodejs事件发射器
  3. Vue推荐库 mitt (event hub)
  4. 掘金:撸一个JS的事件管理
  5. 编辑器核心:事件管理
  6. 裁剪cropper库中自定义事件