HervéRenault.fr

Logo non-officiel de JavaScript

Savoir quand un élément est visible

Ça peut être utile pour démarrer et arrêter une animation selon qu'elle est affichée ou pas, et préserver les performances d'affichage ainsi que la batterie de l'utilisateur. Ou pour toutes sortes de choses.

Exemple

Ouvrir cet exemple dans une autre fenêtre avec la console ancrée à droite pour constater :

C'est un exemple simplifié pour le cas où je veux juste savoir si l'objet observé est affiché en entier, sans chercher à savoir s'il est affiché en partie et dans quelle proportion (pour ça il faut utiliser les seuils et éventuellement les marges, cf MDN)

Ce n'est pas géré par IE11 donc il faut juste vérifier que l'objet IntersectionObserver existe dans l'objet window. Il va quand même afficher dans la console "Your browser doesn't support NodeList.forEach()" parce qu'il ne supporte que Array.forEach() mais ça ne plante pas le script.

Autre exemple

Pour démarrer ou arrêter une animation en fonction de la visibilité :

if ("IntersectionObserver" in window) {
  var observateur = new IntersectionObserver(function(entrées) {
    entrées.forEach(function(entrée) {
      entrée.target.style.animationPlayState = entrée.isIntersecting ? 'running' : 'paused';
    });
  });

  var observés = document.querySelectorAll('.bidule');
  observés.forEach(function(item) {
    observateur.observe(item);
  });
}