Desafortunadamente, no hay una forma directa de decirlo.
Yo diría que si puedes rediseñar tu aplicación para que no dependa de este tipo de flujo, hazlo.
Si no es así, una solución alternativa en la que puedo pensar es realizar un seguimiento de los desplazamientos iniciados por el usuario y comprobarlo para ver si el desplazamiento fue activado por el navegador o por el usuario.
Aquí hay un ejemplo que reuní y que hace esto bastante bien (excepto para los navegadores con los que jQuery history tiene problemas).
Debe ejecutar esto localmente para poder probarlo completamente (jsFiddle / jsbin no se ajustan bien ya que iFrame el contenido).
Aquí están los casos de prueba que validé:
- Carga de la página:
userScroll
esfalse
- Desplácese con el mouse / teclado: se
userScroll
conviertetrue
- Haga clic en el enlace para ir a la parte inferior de la página; se
userScroll
convierte enfalse
- Haga clic en Atrás / Adelante - se
userScroll
convierte en false
;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<script src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/tkyk/jquery-history-plugin/master/jquery.history.js"></script>
</head>
<body>
<span> hello there </span><br/>
<a href="#bottom"> click here to go down </a>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<a name="bottom"> just sitting </a>
</body>
<script type="text/javascript">
var userScroll = false;
function mouseEvent(e) {
userScroll = true;
}
$(function() {
$.history.init(function(hash){
userScroll = false;
});
$(document).keydown(function(e) {
if(e.which == 33
|| e.which == 34
|| e.which == 32
|| e.which == 38
|| e.which == 40
|| (e.ctrlKey && e.which == 36)
|| (e.ctrlKey && e.which == 35)
) {
userScroll = true;
}
});
if(window.addEventListener) {
document.addEventListener('DOMMouseScroll', mouseEvent, false);
}
document.onmousewheel = mouseEvent;
$('a[href*=#]').click(function() {
userScroll = false;
});
$(document).scroll( function(){
console.log('Scroll initiated by ' + (userScroll == true ? "user" : "browser"));
});
});
</script>
</html>
Notas:
- Esto no rastrea el desplazamiento cuando el usuario arrastra la barra de desplazamiento con el mouse. Esto se puede agregar con más código, que dejé como ejercicio para ti.
event.keyCodes
puede variar según el sistema operativo, por lo que es posible que deba cambiarlo de forma adecuada.
¡Espero que esto ayude!