捕获"向下滚动"事件?

Art*_*mix 36 html javascript events scroll javascript-events

我正在设计一个非常简单的网页(仅限HTML),我想要实现的唯一"功能"是当用户向下滚动页面时执行某些操作,是否有办法以某种方式捕获该"事件"?

Ant*_*ist 43

如果您不想使用jQuery(您可能不会为非常简单的HTML页面执行此操作),则可以使用常规Javascript完成此操作:

<script>
function scrollFunction() {
    // do your stuff here;
}

window.onscroll = scrollFunction;
</script>
Run Code Online (Sandbox Code Playgroud)

你提到你想,当他们滚动做一些向下的页面-的onscroll事件触发关闭滚动在任何方向,无论是在X或Y轴,所以你的函数会被他们滚动任何时候.

如果你真的希望它只在向下滚动页面时运行你的代码,你需要保留前一个滚动位置,以便在调用onscroll时进行比较.

  • 应该使用`attachEvent`(IE)和`addEventListener`(其他一切)代替`onscroll`. (4认同)
  • @Pacerier好的,让我重新审视这个评论,因为它有误导性,并且基于我获得的错误信息并且正在互联网上传播.根据[W3C HTML5规范](http://www.w3.org/TR/html5/webappapis.html#event-handlers-on-elements,-document-objects,-and-window-objects),有使用`onscroll`没什么不对.重要的是要注意,[HTML4规范](http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.3)中不存在`onscroll`. (2认同)
  • 我会说使用`addEventListener`和`attachEvent`的好处是你可以附加多个事件,而不是分配一个事件.它使事件更易于管理.我不确定你是怎么用`onscroll`属性做的.(我无法找到方法) (2认同)

Chu*_*ebs 21

你不能只使用HTML,你需要使用Javascript.我建议使用jQuery,所以你的解决方案看起来像这样:

$(document).ready(function() {
    $(window).scroll(function() {
      // do whatever you need here.
    });
});
Run Code Online (Sandbox Code Playgroud)

如果您不想或不能使用jQuery,可以使用onscrollAnthony发布的解决方案.


Joe*_*the 21

更好的方法是不仅要检查滚动事件,还要检查下面的方向滚动;

$(window).bind('mousewheel', function(event) {
if (event.originalEvent.wheelDelta >= 0) {
    console.log('Scroll up');
}
else {
    console.log('Scroll down');
}
});
Run Code Online (Sandbox Code Playgroud)


ste*_*ecb 20

为了完整起见,还有另一个使用另一个JS框架的解决方案(Mootools)

window.addEvent('scroll',function(e) {
    //do stuff
});
Run Code Online (Sandbox Code Playgroud)

  • 是的,它正在修改窗口的原型,这样做没有问题.扩展原型是Javascript的本质,只有少数情况下你应该非常小心(比如Object或DOM-Elements). (3认同)
  • 为什么不使用`window.addEventListener("scroll", function(e) {...});`?因为额外的8个字母? (2认同)
  • 因为通过这种方式(mootools 的方式)你也支持 IE &lt; 9(attachEvent 的东西)... (2认同)

Kia*_*bdi 8

您可以使用该wheel事件来捕获鼠标滚轮事件,因为该mousewheel事件已弃用非标准。您可以在此处阅读有关轮子事件的更多信息

正如@plusz评论的那样:

不要将滚轮事件与滚动事件混淆

window.onwheel = e => {
  if(e.deltaY >= 0){
    // Wheel Down
    console.log('Down');
  } else {
    // Wheel Up
    console.log('Up');
  }
}
Run Code Online (Sandbox Code Playgroud)

  • https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event 注意:不要将滚轮事件与滚动事件混淆。滚轮事件的默认操作是特定于实现的,并且不一定调度滚动事件。即使确实如此,滚轮事件中的 delta* 值也不一定反映内容的滚动方向。因此,不要依赖滚轮事件的 delta* 属性来获取滚动方向。相反,检测滚动事件中目标的scrollLeft 和scrollTop 的值变化。 (3认同)