Leider gibt es keine direkte Möglichkeit, dies zu sagen.
Ich würde sagen, wenn Sie Ihre App so umgestalten können, dass sie nicht von dieser Art von Flow abhängt, entscheiden Sie sich dafür.
Wenn nicht, besteht eine Problemumgehung darin, vom Benutzer initiierte Schriftrollen zu verfolgen und zu überprüfen, ob der Bildlauf vom Browser oder vom Benutzer ausgelöst wurde.
Hier ist ein Beispiel, das ich zusammengestellt habe und das dies ziemlich gut macht (mit Ausnahme von Browsern, mit denen der jQuery-Verlauf Probleme hat).
Sie müssen dies lokal ausführen, um es vollständig testen zu können (jsFiddle / jsbin passen nicht gut zusammen, da sie den Inhalt iFrame).
Hier sind die Testfälle , die ich validiert habe:
- Seitenladevorgänge -
userScrollistfalse
- Scrollen mit Maus / Tastatur -
userScrollwirdtrue
- Klicken Sie auf den Link, um zur Seite unten zu springen -
userScrollwirdfalse
- Klicken Sie auf Zurück / Vorwärts -
userScrollwird 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() {
// reset flag on back/forward
$.history.init(function(hash){
userScroll = false;
});
$(document).keydown(function(e) {
if(e.which == 33 // page up
|| e.which == 34 // page dn
|| e.which == 32 // spacebar
|| e.which == 38 // up
|| e.which == 40 // down
|| (e.ctrlKey && e.which == 36) // ctrl + home
|| (e.ctrlKey && e.which == 35) // ctrl + end
) {
userScroll = true;
}
});
// detect user scroll through mouse
// Mozilla/Webkit
if(window.addEventListener) {
document.addEventListener('DOMMouseScroll', mouseEvent, false);
}
//for IE/OPERA etc
document.onmousewheel = mouseEvent;
// to reset flag when named anchors are clicked
$('a[href*=#]').click(function() {
userScroll = false;
});
// detect browser/user scroll
$(document).scroll( function(){
console.log('Scroll initiated by ' + (userScroll == true ? "user" : "browser"));
});
});
</script>
</html>
Anmerkungen:
- Das Scrollen wird nicht verfolgt, wenn der Benutzer die Bildlaufleiste mit der Maus zieht. Dies kann mit etwas mehr Code hinzugefügt werden, den ich als Übung für Sie hinterlassen habe.
event.keyCodes kann je nach Betriebssystem variieren, daher müssen Sie dies möglicherweise entsprechend ändern.
Hoffe das hilft!