Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滚动体上的侦听器_Javascript_Jquery_Scroll_Listener_Document Body - Fatal编程技术网

Javascript 滚动体上的侦听器

Javascript 滚动体上的侦听器,javascript,jquery,scroll,listener,document-body,Javascript,Jquery,Scroll,Listener,Document Body,我想问一下滚动监听器。我想在主体上添加滚动侦听器,但它似乎不起作用 $('body').scroll(function(){ console.log('SCROLL BODY'); }); 我创建了一个基本的例子,有人能解释一下为什么它不起作用吗? 很抱歉Nubie的问题…因为主体没有滚动,所以窗口没有滚动 在中,您将看到绑定到父容器的事件侦听器是触发的,因为该元素实际上是滚动的元素 HTML如下所示: <div id="container"> <p id="co

我想问一下滚动监听器。我想在主体上添加滚动侦听器,但它似乎不起作用

$('body').scroll(function(){
  console.log('SCROLL BODY');
});
我创建了一个基本的例子,有人能解释一下为什么它不起作用吗?
很抱歉Nubie的问题…

因为主体没有滚动,所以
窗口没有滚动

在中,您将看到绑定到父
容器的事件侦听器是触发的,因为该元素实际上是滚动的元素

HTML如下所示:

<div id="container">
    <p id="content">some text</p>
</div>
#container {
    height: 200px;
    overflow-y: scroll;
}

#content {
    height: 1000px;
}
$('#container').on('scroll', function() {
    console.log('#container');
});

$('#content').on('scroll', function() {
    console.log('#content');
});
相关的JS如下所示:

<div id="container">
    <p id="content">some text</p>
</div>
#container {
    height: 200px;
    overflow-y: scroll;
}

#content {
    height: 1000px;
}
$('#container').on('scroll', function() {
    console.log('#container');
});

$('#content').on('scroll', function() {
    console.log('#content');
});
尝试:

$(window).scroll(function(){
  console.log('SCROLL BODY');
});

这应该得到所有浏览器的支持。

以上所有答案都希望jQuery成为使用框架。框架无关/普通JS实现可能如下所示

ES 5:

//ES 5:
document.getElementsByTagName('body')[0]。onscroll=function(){
console.log(“滚动”);
};纯JS解决方案
一切都很简单:只需使用
addEventListener
滚动事件

document.body.addEventListener('scroll',函数(事件){
log(“;{};”);
} );
并使用CSS使
body
可滚动:

:根目录{
溢出:隐藏;
}
身体{
溢出y:滚动;
最大高度:100vh;
}
我不知道为什么简单的处理程序分配不起作用。如果你知道原因,请告诉我

document.body.onscroll = function( event ) {
    console.log('You will never see this message.');
};

您也可以这样做:

document.body.onwheel = function( e ) {
    ...
};

只有在您使用滚轮时才会触发此事件(对我来说,这实际上并不明显),因此,如果您使用滚动条滚动页面,则不会触发此事件。

我知道我可以在窗口上进行此操作,但我想将滚动侦听器添加到html标记。您希望有什么不同的效果?我正在尝试在html标记级别添加滚动侦听器,不是像窗口一样的js对象,但我认为我需要改变我的方法。所以你说要在主体上滚动,我需要在css中设置高度明确性,否则主体会不断扩展,滚动永远不存在?正确-主体在你的情况下不会滚动,因此绑定到它的侦听器将无法工作。把一个监听器绑定到窗口,你就没事了。我知道我可以把监听器绑定到窗口,但我想把scroll listner添加到html标记中,所以在我的情况下,windows不是一个选项,至少如果我不改变我的方法,在body上滚动是一件不寻常的事情。如果可能的话,我会改变你的方法,以减少将来的麻烦。否则,您需要将CSS添加到正文中,以获得所需的效果。或者您可以只参考document.body-