1
私は、高さと幅が相対的に設定されたコンガニタのdivを持っています。私はJavascriptで、もしあれば、子供がコンテナdivの端を上、右、下、左の方向にどれだけ伸ばしているかを調べたいと思います。どんな助けでも大歓迎です!ここでJavaScriptで動的にオーバーフロー量を計算する
私は、高さと幅が相対的に設定されたコンガニタのdivを持っています。私はJavascriptで、もしあれば、子供がコンテナdivの端を上、右、下、左の方向にどれだけ伸ばしているかを調べたいと思います。どんな助けでも大歓迎です!ここでJavaScriptで動的にオーバーフロー量を計算する
が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);
また要素の幅とscrollWidthまたは高さとscrollHeightプロパティの違いを得ることができます。
うわー、徹底的な回答ありがとう! – VinnyD
Domenic、子ノードの表示プロパティを考慮に入れて、これをどのように適応させることができますか?基本的に、子がdisplay:noneに設定されている場合、私はそれを含めるか、それに子ノードを含めないでください。 – VinnyD
@VinnyDの場合、 'for'ループ内に' descendantPropValues.push(...) 'をラップして' if(descendant.style.display!== "none"){}を追加します。 – Domenic