Ne yazık ki bunu söylemenin doğrudan bir yolu yok.
Uygulamanızı bu tür akışa bağlı kalmayacak şekilde yeniden tasarlayabilirseniz , bunun için gidin.
Değilse , düşünebildiğim bir çözüm , kullanıcı tarafından başlatılan kaydırmaları takip etmek ve kaydırmanın tarayıcı tarafından mı yoksa kullanıcı tarafından mı tetiklendiğini kontrol etmek.
İşte bunu oldukça iyi yapan bir araya getirdiğim örnek (jQuery geçmişinin sorun yaşadığı tarayıcılar hariç).
Tam olarak test edebilmek için bunu yerel olarak çalıştırmanız gerekir (jsFiddle / jsbin, içeriği iFrameledikleri için uygun değildir).
İşte doğruladığım test senaryoları:
- Sayfa yükler -
userScrollolduğufalse
- Fare / klavye kullanarak Kaydırma -
userScrollolurtrue
- Sayfanın altına atlamak için bağlantıya tıklayın -
userScrollolurfalse
- Geri / İleri'ye tıklayın -
userScrollolur 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>
Notlar:
- Bu, kullanıcı kaydırma çubuğunu fareyle sürüklediğinde kaydırmayı izlemez. Bu, sizin için alıştırma olarak bıraktığım biraz daha kodla eklenebilir.
event.keyCodes işletim sistemine göre değişebilir, bu nedenle bunu uygun şekilde değiştirmeniz gerekebilir.
Bu yardımcı olur umarım!