✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Elementos dinâmicos, elementos estáticos, manipuladores de eventos e suas complexidades

12

Trabalhar com elementos empilhados em uma página, alguns que são âncoras e outros que são elementos com manipuladores de eventos, às vezes pode causar um comportamento estranho.

Em última análise, tudo tem a ver com a propagação de eventos, mas se você não teve que lidar com isso (ou eventos borbulhantes ou algo assim), pode ser um desafio.

E aqui está um exemplo: E se você tiver uma imagem envolvida em uma âncora. O que acontece quando você coloca um elemento dinâmico via JavaScript após o carregamento da página que carrega outro elemento dinâmico? Além disso, você deseja impedir que a página seja redirecionada quando o elemento dinâmico for clicado, mas ainda direto quando a imagem for clicada?

Pode parecer simples – e em alguns casos é – mas se você tiver um elemento transparente sobrepondo toda a imagem original, isso pode se tornar um outro desafio.

É aqui que a compreensão dos alvos de eventos entra em jogo. Mas antes de entrar em como resolvê-lo, tentarei destilar tudo em uma explicação mais simples e diagramar como é renderizado no DOM.

Elementos dinâmicos, elementos estáticos e manipuladores de eventos

Então tente imaginar isso: Você tem…

  • Uma página que tem uma imagem e a imagem está envolta em uma âncora que o levará a, digamos, outra página.
  • Quando a página é carregada, dois elementos dinâmicos são criados. Quando o primeiro é clicado, ele deve exibir o segundo elemento dinâmico.
  • Quando a primeira dinâmica é clicada, ela não deve redirecionar a página.
  • Quando a imagem original é clicada, ela deve se comportar conforme o esperado.

A parte difícil disso é que os elementos dinâmicos são colocados em cima da combinação de âncora e imagem existente.

Um olhar sobre o DOM

Isso significa que o DOM ficaria mais ou menos assim:

Observe na imagem acima que a âncora aciona a imagem e o elemento dinâmico aciona a sobreposição dinâmica.

Então, como vamos exibir o segundo elemento dinâmico quando o primeiro clicou sem sair da página? Você pode fazer isso examinando o destino do evento que foi acionado.

O Código para Tratamento de Eventos

Estarei usando jQuery abaixo, já que a maioria dos meus leitores trabalha com WordPress e WordPress vem com jQuery, mas isso também pode ser tratado com JavaScript vanilla (mas tentar seguir esse caminho é mais do que estou disposto a explicar neste particular publicar).

Com isso dito, aqui está a essência da qual vou explicar o que está acontecendo com o código:

$('.acme-element').each(function(e) { var $anchor = $(this).parents('a'); $(this).on('click', function(evt) { if(e.target !== this) { evt.preventDefault(); } // Here, you may want to action to redirect to an original anchor. }); });

Primeiro, estou assumindo que existem vários elementos dinâmicos, portanto, o motivo de cada iterador.

Em seguida, ele cria uma referência ao elemento âncora que é pai da instância atual do elemento dinâmico (usar var aqui é importante para que sempre se refira ao elemento que é o pai da instância atual da iteração versus substituir uma instância anterior ).

Quando o elemento é clicado, configuramos um manipulador de cliques para que possamos dar uma olhada no destino do evento do evento click. É aqui que fica um pouco confuso.

Temos variáveis ​​e e evt, cada uma das quais se refere ao manipulador de eventos para um elemento específico. No código acima:

  • e refere-se ao evento vinculado ao nosso elemento dinâmico,
  • evt se refere ao elemento, mas também afetará o processo de borbulhamento de eventos, o que significa que ele acionará eventos em todo o resto do DOM.

E assim, em nossa condicional, avaliamos o destino do primeiro manipulador de eventos para garantir que ele não corresponda ao elemento específico. A partir daí, como você pode ver no comentário do código, você pode determinar como deseja prosseguir (como talvez seguir em frente e deixá-lo navegar em outro lugar ou fazer outra coisa).

Em última análise, a decisão é sua. Mas quando você entra em um vínculo de elementos dinâmicos, elementos estáticos e manipuladores de eventos, pode ficar complicado rapidamente.

Fonte de gravação: tommcfarlin.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação