$(document) . scrollTop()始终返回0

我只是想做一些事情一旦滚动的位置页面达到一定的高度。但是无论我向下滚动多远,scrollTop()都返回0或 null。这是我用来检查 scrollTop()值的帮助函数:

$('body').click(function(){
var scrollPost = $(document).scrollTop();
alert(scrollPost);
});

我试过将 scrollTop()连接到 $('body')$('html'),当然还有 $(window),但是没有任何改变。

有什么想法吗?

79098 次浏览

出于某种原因,从 html 和 body 标记中删除“ height: 100%”修复了这个问题。

我希望这能帮到别人!

我只是为那些可能犯同样错误的人准备了一个附件。我的代码如下:

var p = $('html,body');
$( ".info" ).text( "scrollTop:" + p.scrollTop() );

除了像 chrome 和 safari 这样的 webkit 浏览器之外,这段代码可以在所有浏览器上使用,因为 <html>标签总是有一个 scrollTop 值为0或 null。

其他浏览器会忽略它,而 webkit 的浏览器则不会。

最简单的解决方案就是从代码中删除 html 标记,瞧:

var p = $('body');
$( ".info" ).text( "scrollTop:" + p.scrollTop() );

也有同样的问题。 ScrollTop ()可以处理某些块,而不是文档或主体。 为了让这个方法工作,你应该为你的块添加高度和溢出样式:

#scrollParag {
height: 500px;
overflow-y: auto;
}

然后:

var scrolParag = document.getElementById('scrollParag');
alert(scrolParag.scrollTop); // works!

我的解决方案,在尝试了以上的一些并且不涉及改变任何 CSS 之后:

var scroll_top = Math.max( $("html").scrollTop(), $("body").scrollTop() )

这可以在最新版本的 Chrome,Firefox,IE 和 Edge 中使用。

顺便说一句,看起来你应该用

$("body").scrollTop()

而不是

$(".some-class").scrollTop

这就是我被困住的原因。

对于我来说,Scroll Top 也总是返回0。我用它来把焦点集中到页面上的特定元素上。我使用了另一种方法来做到这一点。

GetElementById (“ elementID”) . scrollIntoView () ;

在手机、平板电脑和台式机上都能很好地工作。

我遇到了同样的问题:

document.body.scrollTop

下次用

document.scrollingElement.scrollTop

编辑01.06.2018

如果使用 event,那么得到的对象在 targetsrcElement中有 document元素。下面的表格显示了在不同浏览器上的滚动操作。

enter image description here

正如你所看到的,Firefox 和 IE 不支持 srcElement,IE 11也不支持 scrollingElement

从 html 和 body 标记中删除 height: 100%;可以解决这个问题。

原因是您可能已经将100% 设置为 html 和 body 元素的 height 属性的值。如果将 html 和 body 元素的 height 属性设置为100% ,那么它们将得到高度等于文档的高度。

var bodyScrollTop = Math.max(document.scrollingElement.scrollTop, document.documentElement.scrollTop)

应该可以在现代浏览器上工作。