我想执行窗口onscroll
事件,但我不知道为什么它不适用于所有浏览器(firefox,chrome等),并且没有发生错误。
完整代码:
var elem = document.getElementById('repeat');
var show = document.getElementById('show');
for (i = 1; i <= 300; i++) {
elem.innerHTML += i + "<br/>";
}
window.onscroll = function () {
show.innerHTML = document.body.scrollTop;
};
#show {
display:block;
position:fixed;
top:0px;
left:300px;
}
<pre id="repeat"></pre>
<div style="position:relative;">
<div id="show">x</div>
</div>
也是jsfiddle: http://jsfiddle.net/sqo0140j
有什么问题?
答案 0 :(得分:10)
你说了一些有趣的事情:
x更改为0并保持原样。
代码中唯一可能发生的方法是onscroll
功能块因为HTML设置x而进行更改。
如果您的window.onscroll = function()
确实正在开火,但您没有获得正确的滚动位置(即0),请尝试更改滚动位置的返回方式:
window.onscroll = function () {
show.innerHTML = document.documentElement.scrollTop || document.body.scrollTop;
};
我发现document.documentElement.scrollTop
始终在Chrome上返回0。这是因为WebKit使用body
来跟踪滚动,但Firefox和IE使用html
。
请尝试更新的代码段:
var elem = document.getElementById('repeat');
var show = document.getElementById('show');
for (i = 1; i <= 300; i++) {
elem.innerHTML += i + "<br/>";
}
window.onscroll = function () {
show.innerHTML = document.documentElement.scrollTop || document.body.scrollTop;
};
&#13;
#show {
display:block;
position:fixed;
top:0px;
left:300px;
}
&#13;
<pre id="repeat"></pre>
<div style="position:relative;">
<div id="show">x</div>
</div>
&#13;
答案 1 :(得分:1)
我也有同样的问题,但是我不知道是什么原因。 就我而言
window.onscroll = function () {
console.log(document.documentElement.scrollTop || document.body.scrollTop);
};
即使删除了margin:0;
和padding:0;
之后,此代码也无法正常工作。
但是通过在document.body上提及addEventListener,它是可行的
document.body.addEventListener('scroll',()=>{
console.log(document.documentElement.scrollTop || document.body.scrollTop);
})
答案 2 :(得分:0)
对我而言,document.body.scrollTop;
语句在Chrome和Opera中运行良好,但在Firefox上返回0。
副主席声明document.documentElement.scrollTop;
适用于Firefox,但不适用于Chrome和Opera ......
FF
可能不支持document.body.scrollTop;
我试过了:
Math.max(document.body.scrollTop, document.documentElement.scrollTop);
和
document.body.scrollTop || document.documentElement.scrollTop;
它们都适用于所有上述浏览器。
答案 3 :(得分:0)
这个问题已经得到解答,但我想要列出我的情况的详细信息,以防止onscroll工作。
我有datacontainer有自己的滚动条,它覆盖了内置的窗口滚动条。直到我开始使用chrome开发人员更全面地查看页面上的元素之前,我没有注意到这一点。我的外部标签看起来像这样,
这导致左侧出现两个滚动条。这是因为属性overflow:auto告诉数据容器创建另一个滚动条。
一旦我删除了溢出:auto我现在可以正确点击onscroll事件。