Niestety nie ma bezpośredniego sposobu, aby to powiedzieć.
Powiedziałbym, że jeśli możesz przeprojektować swoją aplikację tak, aby nie zależała od tego typu przepływu, idź do tego.
Jeśli nie, rozwiązaniem, które przychodzi mi do głowy , jest śledzenie przewinięć inicjowanych przez użytkownika i sprawdzanie, czy przewijanie zostało uruchomione przez przeglądarkę, czy przez użytkownika.
Oto przykład, który złożyłem razem, który robi to całkiem dobrze (z wyjątkiem przeglądarek, w których historia jQuery ma problemy).
Musisz to uruchomić lokalnie, aby móc to w pełni przetestować (jsFiddle / jsbin nie są dobrze dopasowane, ponieważ umieszczają w ramkach zawartość).
Oto przypadki testowe, które zweryfikowałem:
- Ładowanie strony -
userScrolljestfalse
- Przewiń za pomocą myszy / klawiatury -
userScrollstaje siętrue
- Kliknij link, aby przejść na dół strony -
userScrollstaje sięfalse
- Kliknij Wstecz / Dalej -
userScrollstaje się 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>
Uwagi:
- Nie śledzi przewijania, gdy użytkownik przeciąga pasek przewijania za pomocą myszy. Można to dodać za pomocą dodatkowego kodu, który zostawiłem dla Ciebie jako ćwiczenie.
event.keyCodes może się różnić w zależności od systemu operacyjnego, więc może być konieczna odpowiednia zmiana.
Mam nadzieję że to pomoże!