如何获得文档的滚动位置?


Answers:


46
$(document).height() //returns window height

$(document).scrollTop() //returns scroll position from top of document

我以同样的方式思考,但是为什么console.log($(this).scrollTop())= 1187 console.log($(this).height())= 1762差异如此之大?对于575px,如果我已滚动到页面底部。那些575px哪里去了?滚动条不能为576px :)
某人2010年

3
巴阿再次是我的错。我看着打开的萤火虫窗口的滚动条。Ofc现在可以是576px。:)谢谢,我想主题已关闭。
某人2010年

101
-1-很好,但是没有回答关于的问题scrollHeight
韦恩

8
正确,这是一个jQuery问题。但是$(document).height()或$(document).scrollTop()都不提供所需的信息。该请求是对scrollHeight的要求。scrollHeight值是元素可用的总高度(如果它是可滚动的,则该值可能大于其高度)。scrollTop返回元素离顶部的距离。都不回答总可用高度是多少。参见help.dottoro.com/ljbixkkn.php了解scrollHeight
teynon 2012年

4
这被标记为答案,因为它回答了问标器的预期问题,该问题与文档当前滚动的高度有关... ergo“ scrollHeight”。这个名称在不同的上下文中使用是一个巧合。
Chase Sandmann

177

这是scrollHeight获取使用jQuery选择器获得的元素的方法:

$(selector)[0].scrollHeight

如果selector是元素的ID(例如elemId),则可以确保数组的0索引项将是您希望选择的元素,并且scrollHeight是正确的。


12
请注意,根据Mozilla知识库,低于8.0 developer.mozilla.org/en/DOM/element.scrollHeight
yodabar yodabar的

2
同意@Tomas,使用jQuery的抽象来更好地处理跨浏览器的怪癖。例如,可以将上述内容修改为$(selector).offset()。top
Bob Gregor

3
嗯,没有$(document).offset()返回null,.offset()与浏览器滚动条的位置无关(.offset()返回项目相对于文档的坐标)。我同意我们应该在可能的情况下使用jQuery,但是显然,由于对此没有跨浏览器支持,因此jQuery并未为其提供抽象。
BrainSlugs83 2012年

2
您也可以执行$(selector).get(0).scrollHeight
Ally

1
@Dmitri Zaitsev .scrollHeight是DOM节点属性,而不是jQuery属性。
Zemljoradnik 2014年

45

如果您使用的是Jquery 1.6或更高版本,请使用prop访问该值。

$(document).prop('scrollHeight')

以前的版本用于从attr获取值,但不用于发布1.6。


12
对于jQuery 1.7.1,这为我返回“未定义”,就像$(document).attr(“ scrollHeight”)一样。
Michael

5
那是因为它缺少身体元素。它必须是$(document.body).prop('scrollHeight')-此时,您最好只使用document.body.scrollHeight;。
Goddogsrunning

6
document.getElementById("elementID").scrollHeight

$("elementID").scrollHeight

那么文档对象的元素ID是什么?...也许您的意思是“ document.body.scrollHeight”?
BrainSlugs83 2012年

2
$('#gallery')。scrollHeight给了我未定义///#gallery是我的溢出ID:auto元素,不起作用
Anmol Saraf 2013年

6

它使用HTML DOM元素,但不使用jQuery选择器。可以像这样使用:

var height = document.body.scrollHeight;

3

这样的事情应该可以解决您的问题:

$.getDocHeight = function(){
     var D = document;
     return Math.max(Math.max(D.body.scrollHeight,    D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight));
};

alert( $.getDocHeight() );

附:每次需要时都调用该函数,警报是出于测试目的。


由于某种原因,该功能对我而言无法正常工作;在iframe中使用它。<html>的实际高度为256px,此功能给我337px,我不知道它来自哪里。附言:我使用的是Chrome 18
jurchiks

@jurchiks:您是否有指向该iframe的链接,我看一下?
Zuul 2012年

blade.dateks.lv/salidzinat?ids=58664,43586。单击任何问号。我已经设法解决了大部分问题,但是其中两个(还有更多取决于要比较的项目)在底部仍然有一些怪异,神秘的〜20px边距。但是,当我调整窗口大小时,它消失了,因为我改变了窗口调整大小时的弹出窗口尺寸。
jurchiks 2012年

3

为了获得由窗口滚动条滚动的区域的实际可滚动高度,我使用$('body').prop('scrollHeight')。这似乎是最简单的工作解决方案,但是我还没有广泛检查兼容性。Emanuele Del Grande提到了另一个解决方案,该解决方案可能不适用于低于8的IE。

其他大多数解决方案对于可滚动元素都可以正常工作,但这对整个窗口都适用。值得注意的是,对于Ankit的解决方案,我遇到了与Michael相同的问题,那$(document).prop('scrollHeight')就是returning undefined


1

试试这个:

var scrollHeight = $(scrollable)[0] == document ? document.body.scrollHeight : $(scrollable)[0].scrollHeight;

0

例如,您可以尝试此操作,此代码将所有DIV标签的滚动条置于底部

请记住:jQuery可以接受函数而不是值作为参数。“ this”是jQuery处理的对象,该函数返回当前DIV“ this”的scrollHeight属性,并对文档中的所有DIV执行此操作。

$("div").scrollTop(function(){return this.scrollHeight})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.