2011-06-23 22 views
5

¿Hay alguna manera de evitar que $(window).scroll() se active en la carga de la página?

Probando el siguiente código en Firefox 4, se dispara incluso cuando desconecto el mouse.

jQuery(document).ready(function($){  
$(window).scroll(function(){ 
       console.log("Scroll Fired"); 
    }); 
}); 
+0

ningún ejemplo ¿dónde se necesita para prevenir el desplazamiento? – genesis

+0

Solo necesito evitar que se dispare el evento de desplazamiento cuando no se está desplazando. –

+2

Tenga cuidado al enganchar cualquier cosa al evento de desplazamiento de la ventana http://ejohn.org/blog/learning-from-twitter/ – redsquare

Respuesta

9

El evento scroll no está relacionado con el mouse, se invoca cada vez que se establece una nueva posición de desplazamiento de documento. Y podría decirse que esa posición se establece cuando se carga el documento (puede cargarlo con un ancla después de todo), también si el usuario presiona una tecla de cursor en su teclado. No sé por qué necesita ignorar el evento inicial scroll, pero supongo que solo desea hacerlo si pageYOffset es cero. Eso es fácil:

var oldPageYOffset = 0; 
$(window).scroll(function(){ 
    if (window.pageYOffset != oldPageYOffset) 
    { 
    oldPageYOffset = window.pageYOffset; 
    console.log("Window scrolling changed"); 
    } 
}); 

Nota: MSIE no tiene window.pageYOffset propiedad por lo que lo anterior tendrá que ser ajustado. Quizás jQuery ofrece una alternativa de navegador cruzado.

+0

Esto está casi allí, ¡literalmente solo necesito evitar la primera ejecución! –

+3

@Mild Fuzz: Obtendrá mejores respuestas si explica lo que quiere lograr en lugar de cómo quiere lograrlo. piense que ignorar el primer evento de desplazamiento es la mejor solución para usted, pero ese podría no ser el caso (e imposible de decir si no proporciona más información). De cualquier manera, también puede inicializar 'oldPageYOffset' con' window.pageYOffset 'si desea ignorar el evento' scroll' inicial. –

0

seguro, no lo cargue hasta después de la carga. hacer una llamada de vuelta para dormir por 500 millis.

+0

no es así, el código anterior se carga dentro de 'jQuery (documento) .ready (función ($) { ' –

+0

agregado al código de ejemplo –

6

Esta fue la solución que busqué. Cualquier mejora recibida con gratitud.

var scroll = 0; 
    $(window).scroll(function(){ 
        if (scroll>0){ 
        console.log("Scroll Fired"); 
        } 
        scroll++; 
    }); 
+0

¡Buena solución!:) – Steve

3

El evento de desplazamiento no se dispara en cada carga, sólo cuando actualizar una página que se desplaza, o cuando se navega a un ancla directamente.

Muchas de las respuestas sugieren ignorar la primera vez que se invoca, lo que ignoraría un desplazamiento válido si la página no se desplaza inicialmente.

//Scroll the page and then reload just the iframe (right click, reload frame) 
 

 

 
//Timeout of 1 was not reliable, 10 seemed to be where I tested it, but again, this is not very elegant. 
 
//This will not fire initially 
 
setTimeout(function(){ 
 
    $(window).scroll(function(){ 
 
    console.log('delayed scroll handler'); 
 
    }); 
 
}, 10); 
 

 
//This will fire initially when reloading the page and re-establishing the scroll position 
 
$(window).scroll(function(){ 
 
    console.log('regular scroll handler'); 
 
});
div { 
 
    height: 2000px; 
 
    border: 1px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
</div>

Cuestiones relacionadas