##事件调度和DOM事件流 这一节简单的概述了事件调度的机制,并且描述了事件是怎么通过DOM树传播的。应用可以通过`disapatchEvent()`方法来调度事件对象,事件对象会根据DOM事件流来传播。
事件对象被发送给一个事件目标 ,在派发开始之前,事件对象的传播路径需要首先决定好。
传播路径是一列事件经过时当前事件目标的有序列表,这个传播路径映射着文档的树形分层结构。这个列表的最后一项就是事件目标,前面的这些元素都是它的祖先,最靠近它的就是它的父元素。
一旦传播路径确定了,事件对象经过一个或多个事件阶段。事件阶段分为三次:捕获阶段、目标阶段、冒泡阶段。事件对象这样完成它们的“阶段”。一个阶段可能会被跳过,如果不被支持,或者事件对象的传播停止了。举个例子,如果bubbles
属性被设置为false,冒泡阶段就会被跳过,而且如果stopPropagation()
在事件派发之前被调用,所有的阶段都会跳过。
- 捕获阶段:事件对象沿着目标的祖先从
window
到时间的父节点传播。这就是捕获阶段。 - 目标阶段:事件对象到达事件对象的事件目标。这个阶段也被叫做
at-target phase
(到达目标阶段)。如果这个事件类型决定这个事件不能冒泡,那么这个事件对象将会终止在完成这个阶段以后(focus、blur、scroll事件不会冒泡,load事件在document对象上会等所有都加载完以后才会冒泡传到window对象) - 冒泡阶段:事件对象沿着捕获阶段相反的方向传播,从目标的父节点到
window
对象。这就是冒泡阶段。 ##默认行为和取消事件 一般来说,事件是用户进行操作来派发的,比如响应任务的完成,异步活动的各个阶段(比如网络请求)。有些事件可以用来控制接下来所要进行的操作(或者撤销一个将要采取的操作)。这样的事件叫做可取消的事件,它们所取消的操作叫做默认行为。取消事件对象可能会关联一个或多个‘默认行为’。调用preventDefault()
来取消一个事件。
例1 >一个
mousedown
事件在用户使用鼠标点击一个按钮时被派发。一个可能的默认操作是启动一个状态机允许用户拖拽图像或选择文本。默认的行为依赖于具体的事件对象,比如说,如果鼠标点击的是文本,那么就会出现选择文本的行为;如果指向的是图片,那么可能就会发生拖拽图片的行为。阻止鼠标mousedown
事件的默认行为 可以禁止那些行为发生