2013-03-18 23 views
7

ウィンドウサイズからヘッダーとフッターの値を減算し、ドキュメントの読み込み時にコンテンツをこの値に設定することによって、Webページのコンテンツの高さを動的に設定しようとしています。jQuery outerHeightが正しい値を返さない

各関数パラメータは要素の高さを取得するために要素idを取ります。コンテンツパラメータを除きます。

function setH(header, content, footer) 
{ 
    winH = top.innerHeight; 
    winTitle = 32; // height value of the window title (part of the header) 
    headH = $(header).outerHeight(true); 
    footH = $(footer).outerHeight(true); 
    contentH = winH - winTitle - headH - footH; 
    $(content).css({'height' : (contentH) + 'px','overflow-y' : 'scroll'}); 
} 

私が実行している問題は、outerHeight値が間違った値を返すことです。ヘッダーは23pxとフッター40pxを返します。

FFとChromeの要素を調べると、値は25pxと44pxです。

innerHeight、outerHeight、およびouterHeight(true)を使用しようとしましたが、正しい値を取得できませんでした。

何が間違っているかについてのご意見はありますか?またはコンテンツの高さを動的に設定する別の方法はありますか?私は引っ張るために髪が足りなくなっているので、どんな助けもありがたいです。

編集:私はiframeのコンテンツで作業しています。次のようになります。winH = top.innerHeightは、一番上のiframeウィンドウの高さの値を取得しています。

+0

「トップ」とは何ですか?それは何を保持していますか?あなたのレイアウトも表示してください。 – Starx

+0

私はiframeでポップアップするカスタムウィンドウを持っています。 topはiframeの一番上の高さを取得しています。 –

答えて

1

スクリーン幅/高さの計算に使用するスクリプトを変更しました。私は$(window).load()outerHeight()なく$(document).ready()をチェックするコードを置くことで役立っているしようとする

if (typeof window.innerWidth != 'undefined') { 
     viewportwidth = window.innerWidth; 
     viewportheight = window.innerHeight; 
     winTitle = 32; 
     headH = $(header).outerHeight(true); 
     footH = $(footer).outerHeight(true); 
     contentH = viewportheight - winTitle - headH - footH; 
    } 

    // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document) 

    else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) { 
     viewportwidth = document.documentElement.clientWidth; 
     viewportheight = document.documentElement.clientHeight; 
     winTitle = 32; 
     headH = $(header).outerHeight(true); 
     footH = $(footer).outerHeight(true); 
     contentH = viewportheight - winTitle - headH - footH; 
    } 

    // older versions of IE 

    else { 

    viewportwidth = document.getElementsByTagName('body')[0].clientWidth; 
    viewportheight = document.getElementsByTagName('body')[0].clientHeight; 
    } 
    document.getElementById("content id").style.height = contentH + "px"; 
+0

私の現在のコードで動作するようにスクリプトを修正しましたが、元のコードから返される値は同じです。 –

+0

ヘッダーとフッターは動的ですか?そうでない場合は、.outerHeight(true)をその高さのピクセル数で置き換えることができます。 – Jefferson

+0

それは私の現在の回避策ですが、できるだけ動的なコードにする必要があります。そのために私は値を得ることができる必要があります。 –

15

一つのことを:これが動作するかどうかを参照してください。多くの場合、多くの場合、$(document.ready()を使用すると問題はありませんが、完全にロードされていない要素のためにouterHeight()の値が正しくないことがあります。

+1

イメージを含め、ページ上のすべての要素の読み込みが終了した後、 '(window).load()'が追加されなければならないことがあります。 – Gavin

関連する問題