eventPhase
只读特性在
事件
interface indicates which phase of the event flow is currently being evaluated.
let phase = event.eventPhase;
Returns an integer value which specifies the current evaluation phase of the event flow. Possible values are listed in Event phase constants .
These values describe which phase the event flow is currently being evaluated.
| 常量 | 值 | 描述 |
|---|---|---|
Event.NONE
|
0
|
No event is being processed at this time. |
Event.CAPTURING_PHASE
|
1
|
The event is being propagated through the target's ancestor objects. This process starts with the
Window
,那么
Document
, then the
HTMLHtmlElement
, and so on through the elements until the target's parent is reached.
Event listeners
registered for capture mode when
EventTarget.addEventListener()
was called are triggered during this phase.
|
Event.AT_TARGET
|
2
|
The event has arrived at
the event's target
. Event listeners registered for this phase are called at this time. If
Event.bubbles
is
false
, processing the event is finished after this phase is complete.
|
Event.BUBBLING_PHASE
|
3
|
The event is propagating back up through the target's ancestors in reverse order, starting with the parent, and eventually reaching the containing
Window
. This is known as
bubbling
, and occurs only if
Event.bubbles
is
true
.
Event listeners
registered for this phase are triggered during this process.
|
更多细节,见 section 3.1, Event dispatch and DOM event flow , of the DOM Level 3 Events specification.
<h4>Event Propagation Chain</h4>
<ul>
<li>Click 'd1'</li>
<li>Analyse event propagation chain</li>
<li>Click next div and repeat the experience</li>
<li>Change Capturing mode</li>
<li>Repeat the experience</li>
</ul>
<input type="checkbox" id="chCapture" />
<label for="chCapture">Use Capturing</label>
<div id="d1">d1
<div id="d2">d2
<div id="d3">d3
<div id="d4">d4</div>
</div>
</div>
</div>
<div id="divInfo"></div>
div {
margin: 20px;
padding: 4px;
border: thin black solid;
}
#divInfo {
margin: 18px;
padding: 8px;
background-color:white;
font-size:80%;
}
let clear = false,
divInfo = null,
divs = null,
useCapture = false;
window.onload = function () {
divInfo = document.getElementById('divInfo')
divs = document.getElementsByTagName('div')
chCapture = document.getElementById('chCapture')
chCapture.onclick = function () {
RemoveListeners()
AddListeners()
}
Clear()
AddListeners()
}
function RemoveListeners() {
for (let i = 0; i < divs.length; i++) {
let d = divs[i]
if (d.id != "divInfo") {
d.removeEventListener("click", OnDivClick, true)
d.removeEventListener("click", OnDivClick, false)
}
}
}
function AddListeners() {
for (let i = 0; i < divs.length; i++) {
let d = divs[i]
if (d.id != "divInfo") {
if (chCapture.checked) {
d.addEventListener("click", OnDivClick, true)
}
else {
d.addEventListener("click", OnDivClick, false)
d.onmousemove = function () { clear = true }
}
}
}
}
function OnDivClick(e) {
if (clear) {
Clear()
clear = false
}
if (e.eventPhase == 2)
e.currentTarget.style.backgroundColor = 'red';
let level =
e.eventPhase == 0 ? "none" :
e.eventPhase == 1 ? "capturing" :
e.eventPhase == 2 ? "target" :
e.eventPhase == 3 ? "bubbling" : "error";
divInfo.innerHTML += e.currentTarget.id + "; eventPhase: " + level + "<br/>";
}
function Clear() {
for (let i = 0; i < divs.length; i++) {
if (divs[i].id != "divInfo") {
divs[i].style.backgroundColor = (i & 1) ? "#f6eedb" : "#cceeff"
}
}
divInfo.innerHTML = ''
}
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
eventPhase
|
Chrome 45 | Edge 12 | Firefox Yes | IE 9 | Opera 32 | Safari Yes | WebView Android 45 | Chrome Android 45 | Firefox Android Yes | Opera Android 32 | Safari iOS Yes | Samsung Internet Android 5.0 |
完整支持
事件
AbortController
AbortSignal
AbstractRange
Attr
ByteString
CDATASection
CSSPrimitiveValue
CSSValue
CSSValueList
CharacterData
ChildNode
注释
CustomEvent
DOMConfiguration
DOMError
DOMErrorHandler
DOMException
DOMImplementation
DOMImplementationList
DOMImplementationRegistry
DOMImplementationSource
DOMLocator
DOMObject
DOMParser
DOMPoint
DOMPointInit
DOMPointReadOnly
DOMRect
DOMString
DOMTimeStamp
DOMTokenList
DOMUserData
Document
DocumentFragment
DocumentType
元素
ElementTraversal
Entity
EntityReference
EventTarget
HTMLCollection
MutationObserver
节点
NodeFilter
NodeIterator
NodeList
NonDocumentTypeChildNode
ProcessingInstruction
PromiseResolver
范围
StaticRange
文本
TextDecoder
TextEncoder
TimeRanges
TreeWalker
TypeInfo
USVString
UserDataHandler
XMLDocument