2011-09-17 1 views
1

私は、高さと幅が相対的に設定されたコンガニタのdivを持っています。私はJavascriptで、もしあれば、子供がコンテナdivの端を上、右、下、左の方向にどれだけ伸ばしているかを調べたいと思います。どんな助けでも大歓迎です!ここでJavaScriptで動的にオーバーフロー量を計算する

答えて

2

topのコードです:

より一般的に
var myDivEl = document.getElementById("my-div"); 
var divTop = myDivEl.getBoundingClientRect().top; 

var descendants = myDivEl.getElementsByTagName("*"); 

var tops = []; 
for (var i = 0, descendant; descendant = descendants[i]; ++i) { 
    tops.push(descendant.getBoundingClientRect().top); 
} 

var minTop = Math.min.apply(Math, tops); 

var diff = divTop - minTop; 

function getBoundingClientRectDiff(el, propName, minOrMax) { 
    var propValue = el.getBoundingClientRect()[propName]; 

    var descendants = myDivEl.getElementsByTagName("*"); 

    var descendantPropValues = []; 
    for (var i = 0, descendant; descendant = descendants[i]; ++i) { 
     descendantPropValues.push(descendant.getBoundingClientRect()[propName]); 
    } 

    var extremePropValue = Math[minOrMax].apply(Math, descendantPropValues); 

    return minOrMax === "Max" ? extremePropValue - propValue 
           : propValue - extremePropValue; 
} 

function getBoundingClientRectDiffs(el) { 
    return { 
     top: getBoundingClientRectDiff(el, "top", "Min"), 
     right: getBoundingClientRectDiff(el, "right", "Max"), 
     bottom: getBoundingClientRectDiff(el, "bottom", "Max"), 
     left: getBoundingClientRectDiff(el, "left", "Min") 
    }; 
} 

// use like so: 
var diffs = getBoundingClientRectDiffs(myDivEl); 
console.log(diffs.top, diffs.right, diffs.bottom, diffs.left); 
+0

うわー、徹底的な回答ありがとう! – VinnyD

+0

Domenic、子ノードの表示プロパティを考慮に入れて、これをどのように適応させることができますか?基本的に、子がdisplay:noneに設定されている場合、私はそれを含めるか、それに子ノードを含めないでください。 – VinnyD

+0

@VinnyDの場合、 'for'ループ内に' descendantPropValues.push(...) 'をラップして' if(descendant.style.display!== "none"){}を追加します。 – Domenic

0

また要素の幅とscrollWidthまたは高さとscrollHeightプロパティの違いを得ることができます。

関連する問題