div.text
が別のもの(親の中のdiv#element
)の上にあるときに検出しようとしていますが、重なりの存在によって親の背景が変わるはずです。奇妙な振る舞いでのテキストの重なり検出
スクリプトが重複していない場合でも、.text
はそれぞれの位置を再度比較するため、この問題が発生する可能性があります。
$(".text").each(function() {
var self_text = $(this),
self_textid = self_text.attr('id'),
self_textLeft = self_text.position().left,
self_textTop = self_text.position().top,
self_textWidth = self_text.width(),
self_textHeight = self_text.height();
$(".text").each(function() {
var self_shape = $(this),
self_shapeLeft = self_shape.position().left,
self_shapeTop = self_shape.position().top,
self_shapeWidth = self_shape.width(),
self_shapeHeight = self_shape.height();
// check if .text overlaps
if (
(self_textLeft + self_textWidth) > self_shapeLeft &&
self_textLeft < (self_shapeLeft + self_shapeWidth) &&
(self_textTop + self_textHeight) > self_shapeTop &&
self_textTop < (self_shapeTop + self_shapeHeight)
) {
// overlap
$('#elements').css('background', 'red');
} else {
// no overlap
$('#elements').css('background', 'green')
}
});
});
#elements,
.text {
position: absolute;
}
.text {
width: 50px;
background: blue;
}
#elements {
height: 250px;
width: 400px;
background: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="elements">
<div class="text" style="left: 20px; top: 20px;">text1</div>
<div class="text" style="left: 100px; top: 50px;">text2</div>
<div class="text" style="left: 10px; top: 200px;">text3</div>
<div class="text" style="left: 10px; top: 45px;">text4</div>
</div>
はどのようにしても、そのコードが改善される可能性がどのような方法があり、それは.text
クラスを変更することなく、再びループするたび自体を無視するためのスクリプトを伝えることができますか?
背景がまだ重複と緑のまま:https://jsfiddle.net/brwzf44w/2/は、任意のは、私はしませんでした別の問題がある。このよう
思った? – Lindow
@Lidow、上記の答えを編集しました - 重複している要素を取得したときにループから脱出する必要があります。そうでなければ、続行すると緑色に戻り、別の要素は重複しません。 fiddleが更新されました:https://jsfiddle.net/brwzf44w/4/ – Pete
.textが別のものの後にある場合は、それでも動作しません。https://jsfiddle.net/brwzf44w/6/ – Lindow