以下代码适用于Firefox浏览器。但是,不是铬。下面的代码有什么问题?
window.onload = function()
{
document.body.onscroll = Test.callFn;
}
var Test = new function()
{
this.callFn = function()
{
console.log("Calling this function");
}
}
由于
答案 0 :(得分:6)
当您将()
指定为onscroll处理程序时,您不希望callFn
。
您不想执行该功能,您想为其分配一个引用。
此外,整个文档的onscroll似乎在window
对象上更好地跨浏览器,而不是document
或document.body
。
window.onscroll = Test.callFn;
答案 1 :(得分:6)
我今天遇到过类似的问题。您可以将document.body
更改为window
:
window.onload = function()
{
window.onscroll = function()
{
console.log("Calling this function");
}
}
我注意到,当onscroll
元素具有body
属性时,chrome onscroll
事件正在运行,但在IE中,当html
元素具有onscroll
属性时它正在工作,因此最好将onscroll
事件监听器分配给window
对象。
PS。如果您想查看滚动的像素数,请使用window.pageYOffset
代替document.body.scrollTop
(与上述Chrome和IE相同的情况)。
答案 2 :(得分:2)
可能的一种可能性是页面上有两个window.onscroll
语句,每个语句调用不同的JS方法。检查包含的文件和页面加载中的所有方法。
答案 3 :(得分:2)
我遇到了同样的问题,这是因为我为身体分配了{{1}}。消除它可以解决问题。
答案 4 :(得分:2)
使用CSS的height
属性设置元素的样式时,window.onscroll有时不起作用。
尝试使用min-height
或max-height
。
答案 5 :(得分:0)
在Chrome中,如果您将事件处理程序附加到document.onscroll
事件:
document.onscroll = function() { console.log('Works in Chrome!'); };
答案 6 :(得分:0)
当html
和body
标签的高度设置为100%,并且窗口和文档的滚动事件均不会触发时,也会发生这种情况。为了检查滚动了哪个元素,我对Aaron Mason's snippet进行了一些修改,但这对我也不起作用:
document.querySelectorAll('*').forEach(function(elem) {
elem.addEventListener('scroll', function() {
console.log(this);
});
});