javascript - 使用javascript检测网页顶部的滚动

标签 javascript scroll

我想检测当用户已经位于网页顶部时是否滚动到网页顶部。这意味着正常滚动不应触发操作,只要滚动条位于顶部并且用户进一步滚动到顶部,它就会执行某些操作。

我尝试过下面的代码,但它是在用户到达顶部时触发的,而不是在他“过度滚动”时触发的。 Here是jsfiddle。

window.onscroll = function(ev) {
    if ((window.innerHeight + window.scrollY) ==window.innerHeight) {
        alert("The action");
    }
    document.getElementById('a').innerHTML= window.scrollY+";"+window.innerHeight+";"+(window.innerHeight+ + window.scrollY);
};
p{
  position: fixed;
}
<br>
<br><br>
<br>
<p id="a">sdf
</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

最佳答案

如果可以忽略窗口中最上面一行的像素,那么您可以将滚动位置设置为向下一个像素。然后,如果用户向上滚动到该区域,就会发生好事。

你可以尝试这样的 fiddle :

var scrolling = false, w = $(window);
w.scrollTop(1);

w.on({
 scroll: function() {
   if(w.scrollTop() === 0){ // are we in the 'zero bufferzone'?
     $('#monitor').text('overscrolling');
   }
        
    clearTimeout(scrolling); // reset timer
    scrolling = setTimeout(function() {
        if(w.scrollTop() === 0){
           w.scrollTop(1); // shift down by a pixel
           $('#monitor').text(''); // reset
        }
    }, 250);
    }
});
body{
  height: 3000px;
}

#monitor{
  position: fixed;
  left: 1em;
  bottom: 1em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id='monitor'></div>

关于javascript - 使用javascript检测网页顶部的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43406246/

相关文章:

javascript - 使用 JS 暂时禁用位置/元素的滚动

javascript - 在 Ajax 加载的 Material 上绑定(bind)点击事件

javascript - PushSubscription.endPoint 会随着时间的推移而变化吗?

同步滚动多个可滚动小部件

javascript - 在javascript中检测独特的滚动事件

html - Mobile Safari 中的背景颜色和橡皮筋滚动

JavaScript 将 HTML 类添加到 div。如果声明。 Bootstrap

javascript - GOJS 家谱图中一个 child 有多个 parent

javascript - fancybox终止加载后如何调用javascript函数

android - 使用缩放和滚动打开 ImageView