-1
小さなプロジェクトを作成するために、入れ子要素のイベントフェーズを学習しています。 Codepen JSは43行目から始まります。キャプチャ/バブリングフェーズの間に遅延を入れる方法
ここでは単純なネストされたdivです。
<div id="zzz" class="thir">
0
<div id="xxx" class="thir">
0
<div id="sss" class="thir">
0
</div>
</div>
</div>
ここで私たちはそれをどうしますか?視覚的に
const ar2 = [zzz, xxx, sss];
ar2.map(e => {
e.addEventListener('click', nestedClick, phase);
})
function nestedClick(e) {
// e.stopPropagation();
const meow = this;
const prevColor = this.style.backgroundColor;
this.style.backgroundColor = '#757575';
window.setTimeout(() => { meow.style.backgroundColor = prevColor}, 500);
}
私は、各ステップに背景色と設定されたタイムアウトを変更することが行われるまで待つと同じ戦略で次のクリックをトリガしたい作品をバブリング/取り込む方法を示しています。
しかし、ここでは、要素イベントをクリックした後も、色が変わり、すべての.setTimeout()が同じように強制終了します。どうすれば修理できますか?
サイド質問:なぜe.stopPropagation()がキャプチャフェーズかバブリングフェーズかにかかわらず動作するのはなぜですか?
ありがとうございました!
、イベントの伝播は、最初の撮影で行く(私はbodyタグをクリックしたそれまでは行く)と(クリックされました最初の要素まで、再びすべてのアップ)バブリングので、あなたが呼び出す場合どの段階でも 'stopPropagation'が実行されます。イベントの伝播を停止します。 https://javascript.info/tutorial/bubbling-and-capturing – r1verside