Thật không may, không có cách nào trực tiếp để nói điều đó.
Tôi sẽ nói nếu bạn có thể thiết kế lại ứng dụng của mình để nó không phụ thuộc vào loại quy trình này, hãy làm điều đó.
Nếu không, một cách giải quyết mà tôi có thể nghĩ đến là theo dõi các lần cuộn do người dùng khởi tạo và kiểm tra xem liệu cuộn được kích hoạt bởi trình duyệt hay bởi người dùng.
Đây là một ví dụ mà tôi đã tổng hợp lại để thực hiện điều này khá tốt (ngoại trừ các trình duyệt mà lịch sử jQuery có vấn đề).
Bạn cần chạy cục bộ này để có thể kiểm tra toàn bộ (jsFiddle / jsbin không phù hợp vì chúng iFrame nội dung).
Đây là các trường hợp thử nghiệm mà tôi đã xác thực:
- Số lượt tải trang -
userScroll
làfalse
- Cuộn bằng chuột / bàn phím -
userScroll
trở thànhtrue
- Nhấp vào liên kết để chuyển đến cuối trang -
userScroll
trở thànhfalse
- Nhấp vào Quay lại / Chuyển tiếp -
userScroll
trở thành 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>
Ghi chú:
- Điều này không theo dõi quá trình cuộn khi người dùng kéo thanh cuộn bằng chuột. Điều này có thể được thêm vào với một số mã khác, mà tôi đã để lại như một bài tập cho bạn.
event.keyCodes
có thể thay đổi theo hệ điều hành, vì vậy bạn có thể phải thay đổi phù hợp.
Hi vọng điêu nay co ich!