L'API Intersection Observer est une API Web moderne conçue pour observer les changements dans l'intersection d'un élément cible avec un élément ancêtre ou la fenêtre d'affichage. Il fournit un moyen d'observer de manière asynchrone les changements dans l'intersection d'un élément avec un élément ancêtre ou avec la fenêtre d'affichage d'un document de niveau supérieur. Cela peut être particulièrement utile pour implémenter un chargement paresseux d'images, un défilement infini ou déclencher des animations lorsque des éléments apparaissent.
Pour créer un Intersection Observer, vous devez instancier un nouvel objet IntersectionObserver et transmettre une fonction de rappel et un objet d'options. Voici la syntaxe de base :
let observer = new IntersectionObserver(callback, options);
La fonction de rappel prend deux arguments : un tableau d'objets IntersectionObserverEntry et l'observateur lui-même.
function callback(entries, observer) { entries.forEach(entry => { // Handle each intersection change }); }
L'objet options peut avoir les propriétés suivantes :
Un cas d'utilisation courant de l'API Intersection Observer est le chargement paresseux d'images. Les images ne sont chargées que lorsqu'elles arrivent dans la fenêtre d'affichage, ce qui réduit le temps de chargement initial et économise la bande passante.
<img data-src="image.jpg" alt="Lazy Loaded Image">
document.addEventListener("DOMContentLoaded", function() { let lazyImages = document.querySelectorAll('img[data-src]'); let observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { let img = entry.target; img.src = img.getAttribute('data-src'); img.removeAttribute('data-src'); observer.unobserve(img); } }); }); lazyImages.forEach(img => { observer.observe(img); }); });
Un autre cas d'utilisation consiste à implémenter un défilement infini, où davantage de contenu est chargé à mesure que l'utilisateur fait défiler vers le bas de la page.
<div class="content"></div> <div class="loader">Loading...</div>
let content = document.querySelector('.content'); let loader = document.querySelector('.loader'); let observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { loadMoreContent(); } }); }, { root: null, rootMargin: '0px', threshold: 1.0 }); observer.observe(loader); function loadMoreContent() { // Fetch and append new content to the content div }
Vous pouvez également utiliser l'API Intersection Observer pour déclencher des animations lorsque des éléments apparaissent.
<div class="animate-on-scroll">Animate me!</div>
let animateElements = document.querySelectorAll('.animate-on-scroll'); let observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('animated'); } else { entry.target.classList.remove('animated'); } }); }, { root: null, rootMargin: '0px', threshold: 0.5 }); animateElements.forEach(el => { observer.observe(el); });
Vous pouvez spécifier plusieurs seuils pour déclencher des rappels à différents niveaux de visibilité.
let options = { root: null, rootMargin: '0px', threshold: [0, 0.25, 0.5, 0.75, 1] };
Vous pouvez ajuster dynamiquement la marge racine en fonction de différentes conditions.
let options = { root: null, rootMargin: calculateRootMargin(), threshold: 0 }; function calculateRootMargin() { // Calculate and return root margin based on conditions }
L'API Intersection Observer fournit un moyen puissant et efficace de gérer les changements de visibilité des éléments sur une page Web. Il offre un contrôle précis avec des seuils et des marges racine personnalisables, et sa nature asynchrone garantit qu'il ne bloque pas le thread principal. En tirant parti de cette API, les développeurs peuvent implémenter des fonctionnalités telles que le chargement différé, le défilement infini et les animations lors du défilement, améliorant ainsi l'expérience utilisateur et les performances.
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!