事件
事件概念:
- Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
- 事件通常与函数结合使用,函数不会在事件发生前被执行!
事件是文档或者浏览器窗口中发生的,特定的交互瞬间。 - 典型的例子有:页面加载完毕触发load事件;用户单击元素,触发click事件。
事件流
概念:
事件流:描述的是从页面中接收事件的顺序。
DOM标准采用捕获+冒泡。两种事件流都会触发DOM的所有对象,从document对象开始,也在document对象结束。
事件阶段
DOM标准规定事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。
- 事件捕获阶段:
实际目标div在捕获阶段不会接收事件。也就是在捕获阶 段,事件从document到html再到body就停止了。上图中为1~3. - 处于目标阶段:事件在div上发生并处理。但是事件处理会被看成是冒泡阶段的一部分。
- 冒泡阶段:事件又传播回文档。
注意:
- 所有现代浏览器都支持事件冒泡,但在具体实现中略有差别:
IE5.5及更早版本中事件冒泡会跳过元素(从body直接跳到document)。
IE9、Firefox、Chrome、和Safari则将事件一直冒泡到window对象。 - IE9、Firefox、Chrome、Opera、和Safari都支持事件捕获。尽管DOM标准要求事件应该从document对象开始传播,但这些浏览器都是从window对象开始捕获事件的。
- 由于老版本浏览器不支持,很少有人使用事件捕获。建议使用事件冒泡。
捕获事件
在捕获型事件流中click事件传播顺序为document—><html>—><body>—><div>
冒泡事件
在冒泡型事件流中click事件传播顺序为:<div>—><body>—><html>—>document