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

时间:2012-10-08 19:50:01

标签: javascript jquery scrolltop

一旦页面的滚动位置达到一定高度,我就会尝试做某事。但是,无论我滚动多远,scrollTop()都会返回0或null。这是我用来检查scrollTop()值的帮助功能:

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

我已尝试将scrollTop()附加到$('body')$('html'),当然还有$(window),但没有任何变化。

有什么想法吗?

9 个答案:

答案 0 :(得分:105)

出于某种原因,从我的html和body标签中删除'height:100%'解决了这个问题。

我希望这有助于其他人!

答案 1 :(得分:38)

我在滚动= 0时遇到了同样的问题:

document.body.scrollTop

下次使用

document.scrollingElement.scrollTop

编辑01.06.2018

如果您使用event,那么您的对象在documenttarget中有srcElement个元素。 Example这是一个表格,显示了不同浏览器的滚动操作。

enter image description here

正如您所见,Firefox和IE没有srcElement且IE 11不支持scrollingElement

答案 2 :(得分:6)

我的解决方案,在尝试了上面的一些内容后,并没有涉及更改任何CSS:

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

适用于Chrome,Firefox,IE和Edge的最新版本。

答案 3 :(得分:5)

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

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

此代码适用于所有浏览器,但chrome和safari等webkits浏览器除外,因为<html>标记的scrollTop值始终为零或为null。

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

最简单的解决方法就是从您的代码中移除html标签和Voila:

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:1)

有同样的问题。 scrollTop()适用于某些块而不是文档或正文。 要使此方法有效,您应该为块添加高度和溢出样式:

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

然后:

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

顺便说一下,你似乎应该使用

if(preg_match('/^[a-z0-9\._\-\@]+$/i', $email) === 0) {
    echo 'not valid';
}

而不是

$("body").scrollTop()

这就是我被困的原因。

答案 8 :(得分:0)

Scroll Top总是为我返回0。我用它来将焦点带到页面上的特定元素。我用另一种方法来做到这一点。

的document.getElementById( “elementID”)scrollIntoView();

在移动设备,平板电脑和桌面设备上为我效果良好。