イベントバブリングとイベントキャプチャの実行順序

以前に多くの記事を見てきましたが、どの記事も一律に、イベント キャプチャが最初に実行され、バブリングが後で実行されると述べています。実際、これは厳密ではありません。今日は時間があるので、それを見て例を示します。

  <div id="div1">
        我是div1
        <div id="div2">我是div2
            <div id="div3">
                我是div3
                <div id="div4">我是div4</div>
            </div>
        </div>
    </div>

まず、ネストされた関係である 4 つの div を作成し、それぞれに異なるサイズと背景色を設定しました。ページの表示効果は次のとおりです。

次に、バブリングとキャプチャをこれら 4 つの要素にそれぞれバインドする必要がありますが、このとき addEventListener() を使用する必要があります。このメソッドには 3 つのパラメータを渡す必要があります。

最初のパラメータ: 実行するイベントの名前。on を含めることはできないことに注意してください。たとえば、onclick の代わりに click と記述する必要があります。

2 番目のパラメータ: イベントのトリガー後に実行されるイベント処理関数

3 番目のパラメータ: キャプチャまたはバブリングを実行します。false はバブリングを意味し、これはデフォルト値でもあり、true はキャプチャを意味します。

 //冒泡
        oDiv1.addEventListener('click', function () {
            console.log("我是div1");
        });
        oDiv2.addEventListener('click', function () {
            console.log("我是div2");
        });
        oDiv3.addEventListener('click', function () {
            console.log("我是div3");
        });
        oDiv4.addEventListener('click', function (e) {
            console.log("我是div4");
        });
        //捕获
        oDiv1.addEventListener('click', function () {
            console.log("我是div1-1");
        }, true);
        oDiv2.addEventListener('click', function () {
            console.log("我是div2-2");
        }, true);
        oDiv3.addEventListener('click', function () {
            console.log("我是div3-3");
        }, true);
        oDiv4.addEventListener('click', function (e) {
            console.log("我是div4-4");
        }, true);

パラメータをバインドした後、実行すると、実行結果は次のようになります。

クリックしたのは div4 です。以下の結果を見ると、1 ~ 3 では最初にキャプチャが実行され、次にバブリングが実行されることがわかります。しかし、今回の div4 では、最初にバブリングが出力され、次にキャプチャが実行されます。それを変更し、div4 のバブリング イベントの前に div4 のキャプチャ イベントのみを書き込みます。

//就是把div4的捕获写在前面
 oDiv4.addEventListener('click', function (e) {
            console.log("我是div4-4");
        }, true);
 oDiv4.addEventListener('click', function (e) {
            console.log("我是div4");
        });

実行結果は以下の通り

ネストされた要素の場合、最初にキャプチャが実行され、次にバブリングが実行されます。

ただし、トリガーされた要素 (ここでは div4 を指します) の場合、キャプチャとバブリングの実行順序は、コードが書かれた順序、誰が誰を最初に実行するかによって決まります。

これにより、捕獲とバブリング~戦闘の実行順序を誰でもより明確に知ることができます

おすすめ

転載: blog.csdn.net/wuguidian1114/article/details/106214065