Eventos JavaScript: entenda Capturing e Bubbling

Поділитися
Вставка
  • Опубліковано 30 сер 2020
  • Será que você realmente sabe como funcionam eventos no JavaScript, qual seu fluxo, e como atuar nas fases de Captura e Propagação?
    Trabalhar com eventos em JavaScript faz parte do dia-a-dia de qualquer programador front end. Somos acostumados a criar dezenas, centenas, milhares de eventos!
    Mas muitos ignoram como realmente se dá a dinâmica de gerenciamento de eventos em JS e, por desconhecer esse fluxo, podem acabar se deparando com problemas que não sabem como resolver.
    Neste vídeo, saiba mais sobre evento em JavaScript e aprenda mais sobre o significado de termos como Capturing, Bubbling, Propagation, e como é possível atuar no código para conseguir resultados acurados para problemas específicos de JS.
    💬 Entre na comunidade exclusiva dpw para conversar sobre o conteúdo deste vídeo
    / discord
    ➡️ Basic Front Boilerplate (BFB)
    • Basic Front Boilerplat...
    ➡️ Classes JavaScript
    • Classes JavaScript: o ...
    ==========
    Assine o canal! bit.ly/dpw-youtube
    - Facebook: / desenvolvweb
    - Instagram: / desenvolvweb
    - Twitter: / desenvolvweb
    Conheça o blog desenvolvimento para web: desenvolvimentoparaweb.com/

КОМЕНТАРІ • 88

  • @rafaelnargolo
    @rafaelnargolo 2 роки тому +12

    Eu entendo com bubbling o seguinte:
    Descer no DOM pra capturar um evento em um elemento seria mergulhar numa piscina.
    Se borbulhar lá em baixo, as bolhas sobem de volta pra superfície window, que é a fase de propagação e percorre o mesmo caminho que usamos para descer.

  • @relogiosan
    @relogiosan 3 роки тому +5

    Por isso que eu e muitos já fritamos o celebro ao tentar criar um outSidClick, tipo um click no html para fechar o menu mobile!

    • @dpwoficial
      @dpwoficial  3 роки тому

      Agora tudo ficou claro! hehehe

  • @ThiagoLucioBittencourt
    @ThiagoLucioBittencourt 3 роки тому +4

    Parabéns pelo conteúdo(s). Muito bom(ns). Então. Bubbling é como uma abstração de contexto. Ele não tem uma tradução e sim um sentido relacionado a um evento (parece até que tô falando de JavaScript). Vc deve interpretar a palavra Bubbling como por exemplo. Quando um mergulhador solta o ar quando está mergulhando, as bolhas de ar sobem pra superfície. Ou como as bolhas de uma bebida gasosa ou bolhas do Champagne por exemplo. Esse "efeito" das bolhas subindo pra superfície são a interpretação pra o termo "Bubbling". Por isso eles usaram no processo de execução de eventos. Porque quando a execução do código começa a subir a árvore do DOM, de volta ao início é como a bolha do mergulhador que citei ali. A língua Inglesa (geralmente Americana que é mais "vulgar") tem muito disso. É o resultado de uma língua digamos "pobre" ou "simples". Quanto mais simples a língua mais abstração de contexto elas possuem pra complementar seu vocabulário. Se procurar vai encontrar milhares deles por aí. Já que o texto tá grande mesmo, citar uns exemplos.... "Gnard", "Shred" e até frases como "Piece of cake" são alguns exemplos. Grande abraço e desculpe o texto enorme.

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      👏👏👏

    • @gustavodias7003
      @gustavodias7003 2 роки тому +1

      Agora esse termo fez MUITO mais sentido na minha cabeça, obrigado Thiago e obrigado Tárcio!

  • @Tiago2R
    @Tiago2R 2 роки тому +1

    Que vídeo excelente!
    Obrigado!!!

    • @dpwoficial
      @dpwoficial  2 роки тому +1

      Nós que agradecemos pela participação. Abs, Tiago!

  • @kadumagalhaes9894
    @kadumagalhaes9894 3 роки тому

    Muito bom! Super bem explicado!

  • @hamon5557
    @hamon5557 3 роки тому +1

    Conteúdo objetivo e muito bem explicado, como sempre! Parabéns

    • @dpwoficial
      @dpwoficial  3 роки тому

      Muito obrigado pela atenção de sempre, Hamon! :D

  • @MaiquiTome
    @MaiquiTome 3 роки тому +1

    Excelente explicação!!! Muito obrigado pela ajuda!!! :)

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      Imagina, eu que agradeço a participação, Maiqui.

  • @eduardodefati4892
    @eduardodefati4892 3 роки тому +2

    Tuas aulas são top demais... direto ao ponto... didática show... ajuda muito mesmo! Parabéns! Ganhou mais um inscrito! Hehehe!

    • @dpwoficial
      @dpwoficial  3 роки тому

      Brigadão mesmo, Eduardo! o/

  • @fernandocamilopro
    @fernandocamilopro 3 роки тому

    Cheguei dando like e se inscrevendo, conteúdo top;

    • @dpwoficial
      @dpwoficial  3 роки тому

      Muito obrigado, meu caro! \o/

  • @chdrlz
    @chdrlz 3 роки тому +1

    Muito bom! Já usei esse stop propagation e nem sabia que funcionava assim. Ótimo conteúdo!

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      haha, normal usar assim. A maioria não sabe direito. Quer dizer... Não sabia! :D

  • @relogiosan
    @relogiosan 3 роки тому +1

    Mais claro que isso só o sol do meio dia, valeu amigão!

    • @dpwoficial
      @dpwoficial  3 роки тому

      haha, legal! Imagina! Aquele abraço.

  • @ianspinsh5250
    @ianspinsh5250 2 роки тому

    exelente! vi varios outros videos, mas nenhum mostrava graficos e explicacoes tao simples quanto o seu. Muito obrigado pela aula!

    • @dpwoficial
      @dpwoficial  2 роки тому +1

      Eu que agradeço seu comentário, Ian. :)

  • @DanGiacomelli
    @DanGiacomelli 2 роки тому +1

    Ótima explicação!!!

  • @isaquemoura9991
    @isaquemoura9991 3 роки тому +3

    meu amigo, que trabalho de corno eu tava tendo sem saber disso kkkkk, vai ajudar bastante, obrigado!

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      "trabalho de corno" uaehuahe

  • @roneymendes4234
    @roneymendes4234 2 роки тому +1

    Bom mesmo!!

  • @SouNano1
    @SouNano1 3 роки тому

    muito obrigado!

  • @salvimateus
    @salvimateus 3 роки тому +2

    Aula mto boaa

  • @paulocesar-ui1kt
    @paulocesar-ui1kt 3 роки тому +1

    excelente vídeo

  • @JacksonTumba
    @JacksonTumba 3 роки тому +1

    mais um inscrito vídeos top parabéns, será que podia fazer um vídeo sobre a diferença de uma função tradicional de uma arrow function?

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      Oi, Jackson! Tudo bem? Muito obrigado pela inscrição!
      Posso fazer o vídeo, sim. Publicarei em breve. :)

  • @brenosouzaesilva7216
    @brenosouzaesilva7216 3 роки тому

    Tutorial excepcional!!!

    • @dpwoficial
      @dpwoficial  3 роки тому

      Que isso, vlw mesmo, Breno!

    • @brenosouzaesilva7216
      @brenosouzaesilva7216 3 роки тому

      @@dpwoficial você tem algum conteúdo a respeito de event delegation?

    • @dpwoficial
      @dpwoficial  3 роки тому

      @@brenosouzaesilva7216 Ainda não.

  • @andersonnascimento9864
    @andersonnascimento9864 3 роки тому +1

    Show! Até refiz o exemplo aqui para estudar. :)

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      Boa! Assim que aprende! :D

    • @andersonnascimento9864
      @andersonnascimento9864 3 роки тому

      @@dpwoficial Parabéns pelo conteúdo, sempre bem didáticos. É lindo de ver. :)

    • @dpwoficial
      @dpwoficial  3 роки тому

      @@andersonnascimento9864 haha vlw, Anderson! xD

  • @isaacTheInsane
    @isaacTheInsane Рік тому

    EU TE AMO, MEU NOBRE

  • @iansobral5294
    @iansobral5294 Рік тому

    obrigado

  • @marciobianchi
    @marciobianchi 9 місяців тому +1

    "minha vida toda é uma mentira."
    ótima aula.

  • @caioalcarria7658
    @caioalcarria7658 2 роки тому

    Moço eu te amo

  • @bferreiradiniz
    @bferreiradiniz 25 днів тому

    Top

  • @cleitonreis8405
    @cleitonreis8405 3 роки тому +1

    Tárcio, algum motivo especial para colcolar '$' antes das variáveis?
    Ótimo conteúdo!
    Abs!

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      Resquícios da era jQuery... ;D
      Sempre que uma var/const é para atribuição de elemento(s), coloco desse jeito. Mas é mania mesmo; não precisa. rs

    • @cleitonreis8405
      @cleitonreis8405 3 роки тому +1

      dpw Obrigado! 😎👊🏻

  • @arozendojr
    @arozendojr 3 роки тому +1

    Uma dúvida, além da função posso passar parâmetros para função da acão "click",
    exemplo: el.addEventListener("click", myFuncao, myObjParam, myCallBackExecFimTransacao); ?

    • @dpwoficial
      @dpwoficial  3 роки тому

      Pode passar algo a mais, mas não é qualquer coisa.
      Dá uma olhada na documentação: developer.mozilla.org/pt-BR/docs/Web/API/Element/addEventListener

  • @joselazarojunior7717
    @joselazarojunior7717 Рік тому

    🤙

  • @tawanfonseca6938
    @tawanfonseca6938 Рік тому +1

    Considerando esse capture:true eu consigo usa-lo no contentLoad e verificar se um arquivo foi carregado corretamente ? E se não foi eu posso trabalhar em outras opções. por exemplo : Tenho uma pagina web estática com html css e js , ela tem alguns efeitos apenas de estética com js mas por algum motivo o js não carrega ( intente de celular fraca por exemplo ) então eu posso usar isso pra caso esse Js não carregue eu ative uma classe nos elementos que faz com que essas mesmas animações básicas só que no CSS .É possível isso ?

    • @dpwoficial
      @dpwoficial  Рік тому

      O indicado é como no segundo cenário que você descreveu: animações no CSS e o JS é só para colocar/retirar classes para "ativarem" essas animações.

  • @ChrisG59
    @ChrisG59 10 місяців тому

    Isso funciona como se eu tivesse adicionado o evento de click em cada div separademente, so que nesse caso do video seria de uma forma otimizada utilizando o querySelectorAll e separando o msm evento pra cada elemento? (digo no caso do exemplo no video msm)

    • @dpwoficial
      @dpwoficial  10 місяців тому

      Sim, foi adicionado 1 evento para cada div para mostrar como é a dinâmica de capturing e bubbling.
      Foi uma forma mais didática; no mundo real, geralmente, é mais eficiente usar event delegation.

  • @juniorrocha8888
    @juniorrocha8888 Рік тому +1

    voce disse que pegar todas as divs com queryselectorAll não é a melhor maneira. Então qual seria?

    • @dpwoficial
      @dpwoficial  Рік тому

      Opa, Júnior.
      Não quis dizer sobre o querySelectorAll(), em si, mas em pegar as "div" ao invés de elementos com classe, atributo etc.

  • @ygorluiz
    @ygorluiz 3 роки тому +1

    Tárcio percebi que ao compilar o sass ele joga tudo na pasta dist sem organização nenhuma , em um projeto grande isso seria um grande problema, teria como fazer um video explicando como organizar os arquivos no build ? vlw mestre

    • @dpwoficial
      @dpwoficial  3 роки тому

      Fala, Ygor!
      O BFB atualmente serve mais para projetos de estudos -- embora eu mesmo já o tenha usado em projetos "oficiais" menores.
      Para requisitos e arquiteturas mais exigentes, ou se complementa/customiza o Parcel (que é a base do BFB) ou se recorrer a alternativas mais robustas.

    • @ygorluiz
      @ygorluiz 3 роки тому

      @@dpwoficial Boa mestre, com breve pesquisa na net achei um plugins do parcel que resolve o problema, qual seria essas alternativas mais robustas ?

    • @dpwoficial
      @dpwoficial  3 роки тому

      @@ygorluiz Gulp e Webpack.

    • @chdrlz
      @chdrlz 3 роки тому +1

      Não entendi pq isto seria um problema, o build não serve só para colocar o app online? Pra desenvolvimento ele não é utilizado...

    • @dpwoficial
      @dpwoficial  3 роки тому +1

      @@chdrlz Também não vejo como um problema, propriamente dito... :)

  • @AlexandreSilva-qw4pd
    @AlexandreSilva-qw4pd Рік тому +1

    01:33 por que você usou o cifrão antes do nome da variável? É alguma convenção?

    • @dpwoficial
      @dpwoficial  Рік тому +2

      Sim. Algumas pessoas colocamos "$" no nome para identificar mais facilmente quando a const/var guarda um elemento do DOM.

    • @AlexandreSilva-qw4pd
      @AlexandreSilva-qw4pd Рік тому

      @@dpwoficialAhhh bacana, não sabia...

  • @damieenlucas
    @damieenlucas Рік тому +1

    porq vc botou o $ a frente das dvis?

    • @dpwoficial
      @dpwoficial  Рік тому

      Convenção das antigas. Ajuda a identificar uma var/const que referencia um elemento DOM.

  • @arcadan
    @arcadan Рік тому +1

    cara, mas calma.... se o e.stopPropagation() acontece apenas no bubbling, por que ele parou no "one" se a primeira fase não é afetada por esse método? 🤔🤔

    • @dpwoficial
      @dpwoficial  Рік тому +1

      É só uma questão de nomes: .stopPropagation() funciona em ambas as fases, causando o efeito na "direção" correta.
      Acho que eles ficaram com preguiça de criar um stopCapturing() ou algo assim. rsrs
      Gostei da pergunta. Mostrou que você prestou atenção na explicação. :)

    • @arcadan
      @arcadan Рік тому

      @@dpwoficial no video, ele falou que só afetava o bubbling phase kkkkkk

  • @matheuscunha9708
    @matheuscunha9708 2 роки тому

    Não entendi