如何检测使用JQuery发生冲突的多个div元素?我found a solution,但它只检测到两个元素。你如何将多个div ID传递给该函数?
HTML:
<strong>Drag divs around.</strong>
<div id="div1">
Div1
</div><br/>
<div id="div2">
Div2
</div>
<p>Colliding? <span id="result">false</span>
CSS:
#div1 { width: 200px; height: 50px; background-color: pink; }
#div2 { width: 400px; height: 100px; background-color: green; }
jQuery的:
function collision($div1, $div2) {
var x1 = $div1.offset().left;
var y1 = $div1.offset().top;
var h1 = $div1.outerHeight(true);
var w1 = $div1.outerWidth(true);
var b1 = y1 + h1;
var r1 = x1 + w1;
var x2 = $div2.offset().left;
var y2 = $div2.offset().top;
var h2 = $div2.outerHeight(true);
var w2 = $div2.outerWidth(true);
var b2 = y2 + h2;
var r2 = x2 + w2;
if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2) return false;
return true;
}
window.setInterval(function() {
$('#result').text(collision($('#div1'), $('#div2')));
}, 200);
$('#div1,#div2').draggable();
答案 0 :(得分:0)
似乎重用您自己的collision
方法是一个好主意,但要检查可能发生冲突的每个可能的div组合:
function collision_() {
if (arguments.length > 1) {
for (var x = 0; x < arguments.length; x++) {
for (var y = 1; y < arguments.length; y++) {
if (x == y) {
continue;
}
if (collision(arguments[x], arguments[y])) {
return true;
}
}
}
return false;
}
}
这不是最佳,但它完成了工作。如果你想让它更加优化,我会把它作为锻炼给你。
答案 1 :(得分:0)
你可以将任何数字或参数传递给一个函数,然后在其中使用arguments
关键字,该关键字是所有传入参数的数组:
function doStuff(){
for( var i = 0; i < arguments.length; i++ ) {
var arg = arguments[i];
//Do stuff with arg now.
}
}
此外,jQuery UI中的.draggable()
能够堆叠项目,这是你的最终目标吗?
<强> HTML 强>
<div id="div1" class='box'>Div1</div>
<div id="div2" class='box'>Div2</div>
<强>的jQuery 强>
$('.box').draggable({stack: '.box'});
我用这个例子制作了一个演示:http://jsfiddle.net/ChrisMBarr/nGRwt/134/