第13章 事件


# 第13章 事件

# 13.1 事件流

# 13.1.1 事件冒泡

# 13.1.2 事件捕获

# 13.1.3 DOM事件流

# 13.2 事件处理程序

# 13.2.1 HTML事件处理程序

# 13.2.2 DOM0级事件处理程序

# 13.2.3 DOM2级事件处理程序

# 13.2.4 IE事件处理程序

# 13.2.5 跨浏览器的事件处理程序

# 13.3 事件对象Event

  • event.bubbles 表示事件是否冒泡
  • event.cancleable 表示是否可以取消事件的默认行为
  • event.currentTarget 正在处理的事件元素
  • event.detail 事件相关的细节信息
  • event.preventDefault 取消事件的默认行为
  • event.stopImmediatePropagation 取消事件进一步捕获或者冒泡
  • event.stopPropagation 取消事件进一步捕获或者冒泡
  • event.target 事件的目标
  • event.type 被触发事件的类型

# 13.3.1 DOM中的事件对象

# 13.3.2 IE中的事件对象

# 13.3.3 跨浏览器的事件对象

# 13.4 事件类型

  • UI
    • load
    • unload
    • abort
    • error
    • select
    • resize
    • scroll
  • 焦点
    • blur
    • focus
    • focusin
  • 鼠标与滚轮
    • click 单击
    • dbclick 双击
    • mousedown 鼠标按下
    • mouseenter 鼠标从元素外移动到元素范围之内
    • mouseleave 鼠标移动到元素范围之外
    • mousemove 鼠标指针在元素内部移动重复触发
    • mouseout 鼠标移动到元素范围外触发,移动到父元素之外也会触发一次
    • mouseover 进入一个元素时触发,进入子元素还会触发一次
    • mouseup 鼠标按键抬起
    • clientX 窗口水平位置位置
    • clientY 窗口垂直位置
    • screenX 鼠标相对于屏幕的水平位置
    • screenY 鼠标指针相对于屏幕垂直位置
    • pageX、pageY 鼠标在页面中的位置
    • 坐标
      • 客户端坐标 clientX/clientY
      • 页面坐标 pageX/pageY
      • 屏幕坐标 screenX/screenY
      • 鼠标与目标元素上的位置 offsetX/offsetY
  • 键盘与文本事件
    • keydown
    • keypress 按下除了ctrl、shift、alt有值的建,如果按住不放,会重复触发
    • keyup
  • 复合事件
    • compositionstart
    • compoistionupdate
    • compositiononend
  • # 变动事件

  • HTML5事件
    • contextmenu 单价鼠标右键调出上下文菜单
    • beforeunload
    • DOMContentLoaded 页面所有都加载完毕时触发
    • readystatechange 文档或元素的加载状态有关信息
    • pageshow 页面显示时触发
    • pagehide 页面
    • hashchange URL参数列表发生变化时
  • 设备事件
    • orientationchange 横屏/竖屏

# 13.4.1 UI事件

# 13.4.2 焦点事件

# 13.4.3 鼠标与滚轮事件

# 13.4.4 键盘与文本事件

# 13.4.5 复合事件

# 13.4.6 变动事件

# 13.4.7 HTML5事件

# 13.4.8 设备事件

# 13.4.9 触摸与手势事件

  • touchstart
  • touchmove
  • touchend 手指从屏幕上移开时触发
  • touchcancel
  • touches
  • targetTouchs
  • changeTouches
  • gesturestart 当一个手指已经按在屏幕上而另一个手指又触摸屏幕时触发
  • gesturechange
  • gestureend

# 13.5 内存和性能

# 13.5.1 事件委托

# 13.5.2 移除事件处理程序

# 13.6 模拟事件

# 13.6.1 DOM中的事件模拟

# 13.6.2 IE中的事件模拟

# 13.7 小结

事件是将JavaScript与网页练习在一起的主要方式。“DOM3级事件”规范和HTML5定义了常见的大多数事件。即使有规范定义了基本事件,但很多浏览器仍然在规范之外事件了自己的专有事件,从而为开发人员提供更多掌握用户交互的手段。有些专有事件与特定设备关联,例如亿欧方Safari中的orientationchange事件就是特定关联iOS设备的。

在使用事件时,需要考虑如下一些内存与性能方面的问题。

  • 有必要限制一个页面中事件处理程序的数量,数量太多会导致占用大量内存,而且也会让用户感觉页面反应不够灵敏。
  • 建立在事件冒泡机制之上的事件委托技术,可以有效地减少事件处理程序的数量。
  • 建议在浏览器卸载页面之前移除页面中的所有的事件处理程序。

可以使用JavaScript在浏览器中模拟事件。“DOM2级事件”和“DOM3事件”规范规定了模拟事件的方法,为模拟各种有定义的事件提供了方便。此外,通过组合使用一些技术,还可以在某种程度上模拟键盘事件。IE8及之前版本同样支持时间内模拟,只不过模拟的过程有些差异。

事件是javaScript中最重要的主体之一,深入理解事件的工作机制以及他们对性能的影响至关重要。

上次更新: 1/1/2020, 9:54:36 PM