我正在创建一些插件,我需要获得文档的最大scrollTop
值。
最高scrollTop
值为2001
,但$(document).height()
返回2668
,$('body')[0].scrollHeight
给我undefined
。
如何通过javascript / jquery获取2001
?
答案 0 :(得分:30)
评论中的代码应该有效:
$(document).height() - $(window).height()
以下是滚动到最大滚动位置时发出警告的示例:http://jsfiddle.net/DWn7Z/
答案 1 :(得分:1)
如果您想“猜测”最大滚动值,可能应该比较文档的高度和视口高度(窗口大小)。
/**
* Return a viewport object (width and height)
*/
function viewport()
{
var e = window, a = 'inner';
if (!('innerWidth' in window))
{
a = 'client';
e = document.documentElement || document.body;
}
return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }
}
// Retrieve the height of the document, including padding, margin and border
var documentHeight = $(document).outerheight(true);
var viewPortData = viewport();
var maxScrollTop = documentHeight - viewPortData.height;
当然,在你的插件中,你还应该在resize事件上添加一个监听器,并重新计算最大的scrollTop。
答案 2 :(得分:1)
在vanilla Javascript中,我目前正在这样做:
getScrollTopMax = function () {
var ref;
return (ref = document.scrollingElement.scrollTopMax) != null
? ref
: (document.scrollingElement.scrollHeight - document.documentElement.clientHeight);
};
如果存在,则返回Gecko's non-standard scrollTopMax,否则计算它。我在这里使用document.scrollingElement
,它只存在于特定的浏览器上,但它是easy to polyfill。
答案 3 :(得分:1)
这是我写的https://stackoverflow.com/a/48246003/7668448的答案,它是关于scrollTopMax的polyfill,它是Element对象的本机属性。 (只有mozilla)。看看响应,你真的很喜欢它。
贝娄只是一个快速的片段。链接中的答案更丰富(请务必查看)。
(function(elmProto){
if ('scrollTopMax' in elmProto) {
return;
}
Object.defineProperties(elmProto, {
'scrollTopMax': {
get: function scrollTopMax() {
return this.scrollHeight - this.clientTop;
}
},
'scrollLeftMax': {
get: function scrollLeftMax() {
return this.scrollWidth - this.clientLeft;
}
}
});
}
)(Element.prototype);
使用示例:
var el = document.getElementById('el1');
var max = el.scrollLeftMax;
答案 4 :(得分:0)
试试这个,一个简单易行的解决方案:-
document.body.getBoundingClientRect().bottom;
在 W3 Schools 上找到了这个....