К сожалению, нет прямого способа сказать это.
Я бы сказал, что если вы можете изменить дизайн своего приложения, чтобы оно не зависело от этого типа потока, сделайте это.
Если нет, то я могу придумать обходной путь - отслеживать прокрутки, инициированные пользователем, и проверять это, чтобы увидеть, была ли прокрутка запущена браузером или пользователем.
Вот пример, который я собрал, который делает это довольно хорошо (за исключением браузеров, в которых история jQuery имеет проблемы с).
Вам нужно запустить это локально, чтобы иметь возможность полностью протестировать (jsFiddle / jsbin не подходят, поскольку они iFrame содержимого).
Вот проверенные мной тестовые примеры :
- Загрузка страницы -
userScrollестьfalse
- Прокрутка с помощью мыши / клавиатуры -
userScrollстановитсяtrue
- Щелкните ссылку, чтобы перейти к нижней части страницы -
userScrollстановитсяfalse
- Нажимаем Назад / Вперед -
userScrollстановится 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>
Ноты:
- Это не отслеживает прокрутку, когда пользователь перетаскивает полосу прокрутки с помощью мыши. Это можно добавить с помощью еще одного кода, который я оставил вам в качестве упражнения.
event.keyCodes может отличаться в зависимости от ОС, поэтому вам, возможно, придется изменить это соответствующим образом.
Надеюсь это поможет!