2
我正在查找一个拖放示例,其中拖动项目具有两个必须与两个可拖放区域相匹配的不同区域。用2个拖放目标进行拖放
例子:
我想蓝色的拖动条回复,除非它在它的每一个红孩子降落在绿色区域的位置下降。
理想情况下,我想使用jQuery UI(因为我有它的经验),但任何JavaScript库会很好,在此先感谢。
我正在查找一个拖放示例,其中拖动项目具有两个必须与两个可拖放区域相匹配的不同区域。用2个拖放目标进行拖放
例子:
我想蓝色的拖动条回复,除非它在它的每一个红孩子降落在绿色区域的位置下降。
理想情况下,我想使用jQuery UI(因为我有它的经验),但任何JavaScript库会很好,在此先感谢。
您可以使用draggable
/droppable
选项的组合来实现此目的。给定这样的HTML:
<div id="blue" class="valid">
<div id="red-one" class="red"></div>
<div id="red-two" class="red"></div>
</div>
<div id="green-container">
<div id="green-one" class="green">
</div>
<div id="green-two" class="green">
</div>
</div>
(省略CSS,我没有添加一些规则,请参阅下面的小提琴)。
您可以编写JavaScript这样的:
function isInside(one, other) {
return one.offset().left >= other.offset().left &&
one.offset().top >= other.offset().top &&
one.offset().top + one.height() <= other.offset().top + other.height() &&
one.offset().left + one.width() <= other.offset().left + other.width();
}
$("#blue").draggable({
drag: function(event, ui) {
var $this = $(this);
var $reds = $this.children(".red");
var $greens = $("#green-container").children(".green");
var firstRed = $reds.first();
var firstGreen = $greens.first();
var secondRed = $reds.last();
var secondGreen = $greens.last();
if (isInside(firstRed, firstGreen) && isInside(secondRed, secondGreen)) {
$this.addClass('valid');
}
else {
$this.removeClass('valid');
}
},
revert: 'invalid'
});
$("#green-container").droppable({ accept: ".valid" });
看看这里:http://jsfiddle.net/andrewwhitaker/g6FKz/
注:
div
包含这些元素。这个例子应该很清楚。div
时,都会调用“拖动”事件,该事件确定红色框是否在绿色框内,并将valid
类指定给可拖动的div
。可拖放对象只接受valid
可拖动。希望帮助!
+ +1作为非常详细的答案和工作JSfiddle的例子,谢谢 – 2011-01-07 23:00:20