JS para impacientes

6: O que é a propagação de eventos

February 06, 2020

https://www.instagram.com/tv/B9c6bd-nWcw/?utm_source=ig_web_copy_link

Caso queira executar o exemplo, use o codepen.io

Imagina o seguinte HTML:

<div id="avo">
    <div id="pai">
        <div id="filhao">Filhao</div>
    </div>
</div>

Se a gente botar um evento de clique no #filhao e no #avo qual executaria primeiro?

document.getElementById("avo").addEventListener("click", function (event) {
  console.log("#avo clicado")
})

document.getElementById("filhao").addEventListener("click", function (event) {
  console.log("#filhao clicado")
})

A propagação de eventos ocorre no DOM inteiro, e ele pode acontecer de baixo pra cima ou de cima pra baixo, não entendi, como assim?

O evento não vai acontecer magicamente só no seu botão, imagina que tem um mensageiro maluco que vai de nó em nó tentando avisar “mano, o #um foi clicado, ai vai pro próximo e fala a mesma coisa: mano, o #um foi clicado” até chegar em todos os nós, só que esse doidinho pode começar a fazer essa checagem a partir do:

botão -> em direção a window (Bubbling)

ou da

window -> em direção ao botão. (Capturing)

Exemplo:

Propagação de Eventos

A Propagação de Eventos possui três fases.

  1. Fase de captura - o evento começa a partir de window então desce para todos os elementos até atingir o elemento de destino.
  2. Fase de destino - o evento atingiu o elemento de destino.
  3. Fase de Bubbling - o evento borbulha do elemento alvo e depois sobe todos os elementos até atingir o window.

Ainda não entendeu? Calma, acesse esses materiais:

Baseado no excelente artigo: 70 Interview Questions


Está curtindo os conteúdos da Reativa? Quer que a gente te ajude a ser um dev melhor? Clique aqui.