Pescado salado front-js evento captura / burbujeo

Pescado salado front-js evento captura / burbujeo

Evento burbujeante

Evento burbujeante: múltiples elementos están anidados en una relación jerárquica, y estos elementos registran el mismo evento. Después de que comienza el evento del elemento interno, el evento del elemento externo también se activa automáticamente.
Por ejemplo:

<!DOCTYPE html>
<html>
<head>
    <title>冒泡车测试</title>
    <style type="text/css">
        #bx1 {
            width: 400px;
            height: 400px;
            background-color: red;
        }

        #bx2 {
            width: 300px;
            height: 300px;
            background-color: blue;
        }

        #bx3 {
            width: 200px;
            height: 200px;
            background-color: yellow;
        }

    </style>
</head>
<div id="bx1">
    <div id="bx2">
        <div id="bx3"></div>
    </div>
</div>
<script>
    var xy$ = function (id) {
        return document.getElementById(id)
    }
    xy$("bx1").onclick = function () {
        console.log(this.id)
    }
    xy$("bx2").onclick = function () {
        console.log(this.id)
    }
    xy$("bx3").onclick = function () {
        console.log(this.id)
    }
</script>
</body>
</html>

Haga clic en bx3, tanto bx1 como bx2 tienen efecto
Inserte la descripción de la imagen aquí

Evita que el evento burbujee

Detener método de burbujeo de eventos

window.event.cancelBubble=true;//谷歌,IE8支持,火狐不支持
e.stopPropagation();//谷歌和火狐支持

window.event ye son objetos de parámetros de evento, uno es el estándar de IE y el otro es el estándar de Firefox. El
parámetro de evento e no existe en el navegador de IE8, en este caso, use window.event en su lugar

El ejemplo anterior puede ser así: para ahorrar espacio solo escriba la parte JS

   //阻止事件冒泡函数
    function stopBubble(e) {
        if (e && e.stopPropagation)
            e.stopPropagation()
        else
            window.event.cancelBubble = true
    }

    var xy$ = function (id) {
        return document.getElementById(id)
    };
    xy$("bx1").onclick = function () {
        console.log(this.id)
    };
    xy$("bx2").onclick = function () {
        console.log(this.id)
    };
    xy$("bx3").onclick = function (e) {
        console.log(this.id);
        stopBubble(e)
    }

Efecto
Inserte la descripción de la imagen aquí

Fase del evento

1. Fase de captura de eventos: de afuera hacia adentro
2. Fase de destino de eventos: la seleccionada
3. Fase de burbujeo de eventos: de adentro hacia afuera

Por e.eventPhaseel regreso de este evento propiedades de propagación de la fase actual
* Si el valor de esta propiedad es:
* 1 ----> fase de captura
* 2 ----> fase de destino
* 3 ----> burbuja
*

 	
    var xy$ = function (id) {
        return document.getElementById(id)
    };
    var objs = [xy$("bx3"), xy$("bx2"), xy$("bx1")];
    //遍历注册事件
    objs.forEach(function (ele) {
        //为每个元素绑定事件
        ele.addEventListener("click", function (e) {
            console.log(this.id + ":" + e.eventPhase);
        }, false);
    });


Inserte la descripción de la imagen aquí

166 artículos originales publicados · 22 alabanzas · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/weixin_45020839/article/details/105030692
Recomendado
Clasificación