ドキュメントの最大スクロール値を得る
window.scrollTo(x, y)
でJavaScriptからスクロールできるわけだが、x,yの最大値を得る方法を探った。
GoogleChrome
ChromeにはscrollMaxX
,scrollMaxY
の様なものは無い。
「現在のドキュメント全体の幅/高さ - 現在のwindowの幅/高さ」で計算する。
document.width - window.innerWidth; document.height - window.innerHeight;
と思ったが、innerWidth
,innerHeight
の方が大きくなることがあるみたい(スクロールバー分?)
document.documentElement.getBoundingClientRect().width - window.innerWIdth; document.documentElement.getBoundingClientRect().height - window.innerHeight;
の方が正確に出そうな感じ。
Opera
Mozillaの様なwindow.scrollMaxX/scrollMaxY
みたいのも、Chromeの様なdocument.width/height
も無い。
document.documentElement.getBoundingClientRect().width - window.innerWIdth; document.documentElement.getBoundingClientRect().height - window.innerHeight;
Chromeと同様だけど↑でOK
結論
共通して使えそうなのが以下。
document.documentElement.getBoundingClientRect().width - window.innerWIdth; document.documentElement.getBoundingClientRect().height - window.innerHeight;
んで、Opera 11.51はまだECMAScript5thのObject.defineProperty
が無さそう。その代わり、obj.__defineGetter__
はあるので、
if (!("scrollMaxX" in window)) { window.__defineGetter__("scrollMaxX", function() { return document.documentElement.getBindingClientRect().width - this.innerWidth; }); window.__defineGetter__("scrollMaxY", function() { return document.documentElement.getBindingClientRect().height - this.innerHeight; }); }
で共通して使えるようになりそう。