1// Barre de progression de lecture (option GeneratePerf). 2// Navigateurs qui gèrent les animations liées au défilement : la barre suit le défilement en CSS (animation-timeline: 3// scroll(), styles injectés avec sa couleur), sur le fil du compositeur, sans JavaScript à chaque image ; elle reste 4// synchrone pendant un défilement au doigt. Ailleurs : mise à jour au défilement seulement (écouteur passif, une fois 5// par image au plus), mesures relues à chaque fois (la page s'allonge au chargement des images, la hauteur visible 6// change avec la barre d'adresse mobile), transformation plutôt que largeur (pas de recalcul de mise en page). 7(function () { 8 const bar = document.createElement('div'); 9 bar.className = 'progress-bar'; 10 document.body.appendChild(bar); 11 if (window.CSS && CSS.supports && CSS.supports('animation-timeline: scroll()')) { 12 return; 13 } 14 let pending = false; 15 const update = function () { 16 pending = false; 17 const max = document.documentElement.scrollHeight - window.innerHeight; 18 const ratio = max > 0 ? Math.min(1, Math.max(0, window.scrollY / max)) : 0; 19 bar.style.transform = 'scaleX(' + ratio + ')'; 20 }; 21 const schedule = function () { 22 if (!pending) { 23 pending = true; 24 requestAnimationFrame(update); 25 } 26 }; 27 window.addEventListener('scroll', schedule, { passive: true }); 28 window.addEventListener('resize', schedule, { passive: true }); 29 update(); 30})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.