• 締切済み

ページの縦幅を取得する際の問題

ページの縦幅は書き込まれる情報量によって動的に変わります。この縦幅を取得する良い方法がないか探していたところ、Lightboxの関数でまさしく探していたものがありました。 function getPageSize(){ var xScroll, yScroll; if (window.innerHeight && window.scrollMaxY) { xScroll = document.body.scrollWidth; yScroll = window.innerHeight + window.scrollMaxY; } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight; } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; } var windowWidth, windowHeight; if (self.innerHeight) { // all except Explorer windowWidth = self.innerWidth; windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight; } else if (document.body) { // other Explorers windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight; } // for small pages with total height less then height of the viewport if(yScroll < windowHeight){ pageHeight = windowHeight; } else { pageHeight = yScroll; } // for small pages with total width less then width of the viewport if(xScroll < windowWidth){ pageWidth = windowWidth; } else { pageWidth = xScroll; } arrayPageSize = new Array(pageWidth,pageHeight) return arrayPageSize; } この関数を実行すると配列[0]に横幅、配列[1]に縦幅が返ってきます。しかしページ内にCSSでposition: absoluteで位置を指定したオブジェクトがあると、それを認識できないのか求める数値とは違う(小さい)ものが返ってきてしまいます。これはどのようにして対応すればよいのでしょうか?

みんなの回答

回答No.2

全てのオブジェクトを調べて "position==absolute または position==relative"かつオブジェクトの上端 + オブジェクトの高さがドキュメントの高さ以上の位置にある場合は それに合わせて取得したドキュメントの高さを調整すればいいのでは? 私にはこれくらいしか思いつきません。

noname#30818
noname#30818
回答No.1

スクリプトの内容も読んでいませんし、そのスクリプトを使ったこともありませんが、参考程度に読んでください。 そして、気になることが見つかったら検討してみてください。 >これはどのようにして対応すればよいのでしょうか? 本当に対応する必要があるかを検討する必要があると思います。 >ページの縦幅は書き込まれる情報量によって動的に変わります。この縦幅を取得する良い方法がないか探していたところ、Lightboxの関数でまさしく探していたものがありました。 質問者さんがこのように言っていますからね。 >ページ内にCSSでposition: absoluteで位置を指定したオブジェクトがあると、それを認識できないのか求める数値とは違う(小さい)ものが返ってきてしまいます。 何に対して小さい数字なのかを書いて頂かないとなんとも言えませんが、求めているものがページの縦幅ならばCSSでposition: absoluteの要素に続く要素はposition: absoluteが指定された要素が無いものとして流し込まれると言うことが仕様書に書かれていたと記憶しております。 http://hp.vector.co.jp/authors/VA022006/css/visualren.html#positioning-schemes http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/visuren.html#choose-position この仕様書と同じように振舞うブラウザであれば、例えばA,B,C,Dと言う要素がありその中の1つがposition: absoluteであるならばposition: absoluteが指定されている要素の高さを除いたものがほぼページの高さになると解釈できるのではないでしょうか。 もし質問者さんがこの例でA,B,C,Dの全ての高さを足したものがほぼページの高さになると考えそれに対して関数が返す値が小さいと感じられているのであればそれは本当に対応すべきことか疑問に感じます。