プラグインを作成していますが、ドキュメントの最大scrollTop
値を取得する必要があります。 scrollTop
の最大値は_2001
_ですが、$(document).height()
は_2668
_を返し、$('body')[0].scrollHeight
はundefined
を返します。
Javascript/jqueryを介して_2001
_を取得する方法?!
コメント内のコードは機能するはずです。
$(document).height() - $(window).height()
最大スクロール位置までスクロールしたときに警告する例を次に示します。 http://jsfiddle.net/DWn7Z/
これが私が書いた答えです https://stackoverflow.com/a/48246003/7668448 、それはElementオブジェクトのネイティブプロパティであるscrollTopMaxのポリフィルに関するものです。 (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;
スクロールトップの最大値を「推測」したい場合は、ドキュメントの高さとビューポートの高さ(ウィンドウのサイズ)を比較する必要があります。
/**
* 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;
もちろん、プラグインで、サイズ変更イベントにリスナーを追加し、最大のscrollTopを再計算する必要もあります。
バニラジャバスクリプトで私は現在これをやっています:
getScrollTopMax = function () {
var ref;
return (ref = document.scrollingElement.scrollTopMax) != null
? ref
: (document.scrollingElement.scrollHeight - document.documentElement.clientHeight);
};
これは Geckoの非標準のscrollTopMax が存在する場合はそれを返し、それ以外の場合は計算します。ここでは、特定のブラウザにのみ存在するdocument.scrollingElement
を使用していますが、これは 簡単にポリフィルできる です。