イベントが発生すると、特定の順序で要素ノード間で伝播されます。この伝播プロセスは DOM イベント ストリームです。
#DOM イベント フローは、次の 3 つの段階に分かれています。
#キャプチャ フェーズ:イベントがドキュメント ノードからターゲット ノードまで上から下に伝播されるステージ;
ターゲット フェーズ:実際のターゲット ノードはイベントを処理しています。
バブリング ステージ : イベントがターゲット ノードからドキュメント ノードに上から下に伝播されるステージ。
#キャプチャ フェーズ:<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.father {
overflow: hidden;
width: 300px;
height: 300px;
margin: 100px auto;
background-color: pink;
text-align: center;
}
.son {
width: 200px;
height: 200px;
margin: 50px;
background-color: purple;
line-height: 200px;
color: #fff;
}
</style>
</head>
<body>
<div>
<div>son盒子</div>
</div>
<script>
var son = document.querySelector('.son');
son.addEventListener('click', function() {
console.log('son');
}, true);
var father = document.querySelector('.father');
father.addEventListener('click', function() {
console.log('father');
}, true);
document.addEventListener('click', function() {
console.log('document');
}, true);
</script>
</body>
</html>
キャプチャ フェーズ イベントがドキュメント ノードからターゲット ノードに上から下に伝播されていることがわかります。
#バブル ステージ:
<script>
var son = document.querySelector('.son');
son.addEventListener('click', function() {
console.log('son');
}, false);
var father = document.querySelector('.father');
father.addEventListener('click', function() {
console.log('father');
}, false);
document.addEventListener('click', function() {
console.log('document');
})
</script>
バブリングフェーズイベントがターゲットノードからドキュメントノードに上から下に伝播していることがわかります。
注:
1. JS コードは、キャプチャ ステージまたはバブリング ステージのいずれか 1 つだけを実行できます (キャプチャまたはバブリングのいずれか)。 bubble)
2、onclick とattachEvent (すなわち) はバブリングステージのみを取得できます
3、addEventListener(type,listener [,useCapture ]) 3 番目のパラメーターが true
の場合、イベント キャプチャ フェーズ でイベント ハンドラーを呼び出すことを意味し、false の場合 ( は記述しないでください)デフォルトは false) で、これはイベント ハンドラーが イベント バブリング フェーズ##4 中に呼び出されることを意味します。実際の開発では、イベント キャプチャを使用することはほとんどありません。イベントのバブリングに注意してください
5。onblur、onfocus、onmouseenter、onmouseleave6 など、一部のイベントはバブリングしません。場合によってはトラブルを引き起こすこともありますが、停止することは可能です。メソッドは次のとおりです:
stopPropagation()
stopPropagation()メソッド : 終了イベントが伝播されます。さらに、伝播プロセスのキャプチャ、ターゲット処理、またはバブリング段階でも同様です。このメソッドを呼び出した後、そのノード上のイベントのハンドラーが呼び出され、イベントは他のノードにディスパッチされなくなります。
この記事は js チュートリアル 列からのものです。ぜひ学習してください。
以上がDOM イベント フローの 3 つの段階の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。