Aquí es una solución que doesn no requiere el uso de un extr una biblioteca JS o complemento, que apunta a la simplicidad. Puede que no sea tan eficiente como otras implementaciones, pero definitivamente es un paso adelante de disparar tu evento principal cada vez que te desplazas.
Esto fue tomado de este blog post por Danny Van Kooten. Que he usado para retrasar mis eventos onscroll()
para mi botón de volver arriba en mi 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);
});
También puede mejorar aún más el rendimiento moviendo a cabo las variables de la función de devolución de llamada para evitar cálculos innecesarios, por ejemplo el valor de $(window).height()
o la altura de algún elemento div estática que no va a cambiar una vez que la página se carga .
Aquí hay un ejemplo que está adaptado de mi caso de 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.
});
Esto limita la función real que sólo se ejecute cada 150 ms, o de lo contrario restablecer el temporizador de nuevo a 0 si no ha pasado de 150 ms. Ajusta el valor para que se ajuste a lo que necesitas.
bastante impresionante, pero estoy tratando de evitar cualquier dependencia. –
Mire el código fuente para subrayar (que está increíblemente documentado) y simplemente extraiga el acelerador. – tkone