« MediaWiki:Common.js » : différence entre les versions
Page de l’interface de MediaWiki
Autres actions
Aucun résumé des modifications |
minicard |
||
| Ligne 255 : | Ligne 255 : | ||
/* === fin Modèle:Règle === */ | /* === fin Modèle:Règle === */ | ||
/* | /* ============================================================================= | ||
( function ( | EFFET D'APPARITION EN CASCADE POUR LES MINICARDS (Intersection Observer) | ||
' | ============================================================================= */ | ||
mw.hook('wikipage.content').add(function ($content) { | |||
// On cherche toutes les minicards de la page qui n'ont pas encore été animées | |||
const cards = $content[0].querySelectorAll('.minicard:not(.is-loaded)'); | |||
if (!cards.length) return; | |||
// Vérification de la compatibilité du navigateur | |||
if ('IntersectionObserver' in window) { | |||
let delay = 0; | |||
let resetDelayTimeout; | |||
const observer = new IntersectionObserver((entries, obs) => { | |||
entries.forEach(entry => { | |||
if (entry.isIntersecting) { | |||
// Si la carte entre dans l'écran, on applique un délai pour l'effet "cascade" | |||
setTimeout(() => { | |||
entry.target.classList.add('is-loaded'); | |||
}, delay); | |||
delay += 75; // 75ms de décalage entre chaque carte | |||
// On réinitialise le délai si on a fini de traiter un groupe de cartes | |||
clearTimeout(resetDelayTimeout); | |||
resetDelayTimeout = setTimeout(() => { delay = 0; }, 100); | |||
// On arrête d'observer cette carte pour ne l'animer qu'une seule fois | |||
obs.unobserve(entry.target); | |||
} | |||
}); | |||
}, { | |||
rootMargin: '0px 0px -30px 0px', // Déclenche l'animation 30px AVANT que la carte n'arrive en bas de l'écran | |||
threshold: 0.1 | |||
}); | |||
// On observe chaque carte trouvée | |||
cards.forEach(card => observer.observe(card)); | |||
} else { | |||
// Fallback pour les très vieux navigateurs : on affiche tout direct | |||
cards.forEach(card => card.classList.add('is-loaded')); | |||
/ | |||
cards.forEach( | |||
} | } | ||
}); | |||