Ecco una soluzione che doesn 'richiedono l'uso di un extr una libreria o un plugin JS, che mira alla semplicità. Potrebbe non essere efficiente come altre implementazioni, ma è sicuramente un passo avanti nel licenziare il tuo evento principale ogni volta che scorri.
Questo è stato preso da questo blog post da Danny Van Kooten. Che ho utilizzato per ritardare i miei eventi onscroll()
per il mio pulsante back-to-top sul mio blog.
var timer;
$(window).scroll(function() {
if(timer) {
window.clearTimeout(timer);
}
timer = window.setTimeout(function() {
// actual code here. Your call back function.
console.log("Firing!");
}, 100);
});
È inoltre possibile migliorare ulteriormente le prestazioni spostando fuori variabili fuori dalla funzione di callback per evitare calcoli inutili, ad esempio, il valore di $(window).height()
o altezza di qualche elemento div statica che non cambierà una volta che la pagina viene caricata .
Ecco un esempio che viene adattato dal mio caso d'uso.
var scrollHeight = $("#main-element").height(); //never changes, no need to recalculate.
$(window).on('scroll', function() {
if (timer)
window.clearTimeout(timer);
timer = window.setTimeout(function() {
var scrollPosition = $(window).height() + $(window).scrollTop();
if ($(window).scrollTop() < 500)
$(".toggle").fadeIn(800);
else
$(".toggle").fadeOut(800);
}, 150); //only fire every 150 ms.
});
Questo limita la funzione che deve essere eseguito solo ogni 150ms, oppure resettare il timer di nuovo a 0 se 150ms non è passato. Modifica il valore per adattarlo alle tue esigenze.
abbastanza impressionante, ma sto cercando di evitare eventuali dipendenze. –
Guarda il codice sorgente per sottolineare (che è incredibilmente documentato) e basta tirare il gas. – tkone