Maison > interface Web > js tutoriel > Événements non adaptés à l'utilisation du mécanisme de bouillonnement

Événements non adaptés à l'utilisation du mécanisme de bouillonnement

王林
Libérer: 2024-01-13 08:09:21
original
1259 Les gens l'ont consulté

Événements non adaptés à lutilisation du mécanisme de bouillonnement

Défauts des événements bouillonnants : Quels événements ne conviennent pas à l'utilisation du mécanisme de bouillonnement ?

Dans le développement front-end, le mécanisme de bouillonnement d'événements est une méthode d'interaction très importante. Il permet aux événements qui se produisent dans un document HTML d'être propagés séquentiellement de l'élément le plus interne imbriqué à l'élément externe. Cependant, bien que le mécanisme de bullage soit très utile dans de nombreuses situations, il ne s’applique pas à tous les événements, et certains événements peuvent même conduire à des défauts dans le mécanisme de bullage. Cet article discutera des événements qui ne conviennent pas à l'utilisation du mécanisme de bouillonnement et l'illustrera avec des exemples de code spécifiques.

1. Types d'événements qui ne conviennent pas à l'utilisation du mécanisme de bouillonnement

  1. Événement Scroll : L'événement scroll est déclenché lorsque l'élément défile. Dans un conteneur à défilement, si l'événement scroll de l'élément interne remonte vers l'élément externe, cela entraînera des problèmes de performances. Considérons l'exemple de code suivant :
<div id="outer" style="overflow: scroll; height: 200px;">
  <div id="inner" style="height: 1000px;">
    <p>Scroll inside the inner div</p>
  </div>
</div>
<script>
  document.getElementById('inner').addEventListener('scroll', function(event) {
    console.log('Scroll event bubbled to the outer div');
  }, false);
</script>
Copier après la connexion

Dans le code ci-dessus, lorsque nous faisons défiler l'élément div interne, l'événement scroll remonte jusqu'à l'élément div externe. Si l'élément div externe a beaucoup de contenu, le bouillonnement des événements de défilement entraînera une série de problèmes de performances.

  1. événement d'entrée : l'événement d'entrée est déclenché lorsque l'utilisateur saisit du texte ou modifie le contenu dans la zone de texte. De manière générale, nous souhaitons répondre instantanément et effectuer une validation ou un traitement lorsque l'utilisateur entre. Cependant, si le mécanisme de bouillonnement est utilisé, l'événement d'entrée remontera jusqu'à l'élément parent à chaque fois qu'il est saisi, entraînant une surcharge de performances inutile. Voici un exemple :
<div id="parent">
  <input type="text" id="child">
</div>
<script>
  document.getElementById('parent').addEventListener('input', function(event) {
    console.log('Input event bubbled to the parent div');
  }, false);
</script>
Copier après la connexion

Dans le code ci-dessus, chaque fois qu'un caractère est saisi dans la zone de texte, l'événement d'entrée remonte jusqu'à l'élément parent. Si l'élément parent a beaucoup de contenu, le navigateur appellera fréquemment le gestionnaire d'événements bouillonnants, réduisant ainsi les performances.

2. Comment éviter les problèmes de performances causés par le mécanisme de bouillonnement

Dans le scénario ci-dessus, nous pouvons utiliser deux méthodes pour résoudre les problèmes de performances causés par l'utilisation du mécanisme de bouillonnement.

  1. Méthode stopPropagation() : La méthode stopPropagation() peut empêcher la diffusion bouillonnante d'événements. Lorsque nous déterminons qu'un type d'événement n'est pas adapté au bouillonnement, nous pouvons appeler cette méthode au début de la fonction de gestion des événements pour arrêter le bouillonnement. Voici un exemple de code :
<div id="outer" style="overflow: scroll; height: 200px;">
  <div id="inner" style="height: 1000px;">
    <p>Scroll inside the inner div</p>
  </div>
</div>
<script>
  document.getElementById('inner').addEventListener('scroll', function(event) {
    event.stopPropagation();
    console.log('Scroll event bubbled to the outer div');
  }, false);
</script>
Copier après la connexion

Dans le code ci-dessus, nous appelons event.stopPropagation() afin que les événements de défilement ne remontent plus jusqu'à l'élément div externe, évitant ainsi les problèmes de performances causés par le mécanisme de bouillonnement.

  1. Lier les événements directement : dans certains cas, nous pouvons lier des événements directement sur l'élément cible pour éviter que les événements ne se propagent vers des éléments parents inutiles. Voici l'exemple de code :
<div id="parent">
  <input type="text" id="child">
</div>
<script>
  document.getElementById('child').addEventListener('input', function(event) {
    console.log('Input event on child');
  }, false);
</script>
Copier après la connexion

Dans le code ci-dessus, nous avons lié l'événement d'entrée directement sur l'élément de zone de texte sans le transmettre à l'élément parent via le mécanisme de bulle. Cela évite les problèmes de performances causés par le bouillonnement d’événements.

Résumé :

Bien que le mécanisme d'événement bouillonnant soit très utile dans de nombreuses situations, il ne s'applique pas à tous les événements. Sous certains types d'événements, tels que les événements de défilement et les événements d'entrée, l'utilisation du mécanisme de bouillonnement peut entraîner des problèmes de performances. Afin d'éviter ces problèmes, nous pouvons utiliser la méthode stopPropagation() pour empêcher l'événement de se propager, ou lier l'événement directement à l'élément cible pour empêcher l'événement de se propager vers des éléments parents inutiles. Cela garantit les performances de la page et l’expérience utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal