11

以下代码适用于 Firefox 浏览器。但是,不是铬。下面的代码有什么问题?

window.onload = function()
{
   document.body.onscroll =  Test.callFn;
}

var Test = new function()
{
   this.callFn = function()
   {
      console.log("Calling this function");
   }
}

谢谢

4

7 回答 7

10

我今天有类似的问题。您可以更改document.bodywindow

window.onload = function()
{
   window.onscroll = function()
   {
      console.log("Calling this function");
   }
}

我注意到在 chromeonscroll中事件在body元素具有onscroll属性时起作用,但在 IE 中它在html元素具有onscroll属性时起作用,因此最好将onscroll事件侦听器分配给window对象。

PS。如果你想检查你滚动了多少像素 - 使用window.pageYOffset而不是document.body.scrollTop(与上面描述的 chrome 和 IE 相同的情况)。

于 2015-07-06T17:11:23.537 回答
6

()当您分配callFn为 onscroll 处理程序时,您不希望。
你不想执行这个函数,你想给它分配一个引用。

此外,整个文档的 onscroll 似乎在window对象上更好地跨浏览器工作,而不是documentor document.body

window.onscroll = Test.callFn;
于 2013-06-10T04:11:52.550 回答
6

我有同样的问题,这是因为我已经overflow-x: hidden分配给身体。删除这个解决了这个问题。

于 2018-12-28T16:49:10.627 回答
5

height当您使用css的属性为元素设置样式时,window.onscroll 有时不起作用。

尝试使用min-heightormax-height代替。

于 2020-02-18T18:24:09.110 回答
4

一种可能性是您的页面上有两个window.onscroll语句,每个语句调用不同的 JS 方法。检查包含的文件和页面加载中的所有方法。

于 2017-04-13T19:41:32.460 回答
3

html当和标签的高度body设置为 100% 并且滚动事件不会为窗口或文档触发时,也可能会发生这种情况。为了检查滚动了哪个元素,我稍微修改了Aaron Mason 的片段,这对我也不起作用:

document.querySelectorAll('*').forEach(function(elem) {
    elem.addEventListener('scroll', function() {
        console.log(this);
    });
}); 
于 2019-12-07T10:08:29.343 回答
1

在 Chrome 中,如果您将事件处理程序附加到事件,它就会起作用document.onscroll

document.onscroll = function() { console.log('Works in Chrome!'); };

于 2013-06-10T04:11:36.997 回答