gpt4 book ai didi

javascript - 拖放 2 个放置目标

转载 作者:行者123 更新时间:2023-11-29 22:37:06 25 4
gpt4 key购买 nike

我正在寻找一个拖放示例,其中拖动项有两个不同的区域,必须与两个可放置区域相匹配。

例子: alt text

我希望蓝色拖动项恢复原状,除非它被放置在其每个红色子项落在绿色区域的位置。

理想情况下,我想使用 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,我确实添加了一些规则,请参见下面的 fiddle )。

你可以这样写 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,否则目标可放置对象将不接受拖动的元素,即使它是有效的(希望对此提供一些输入)。不确定这是怎么回事,可能是 jQueryUI 中的错误。不过没什么大不了的。
  • 目标 droppable 不完全是两个绿色元素,它是一个包含这些元素的白色 div。从示例中应该可以清楚地看出这一点。
  • 每次移动可拖动的div,都会调用“drag”事件,判断红色框是否在绿色框内,并分配一个valid类给可拖动的 div。可放置对象仅接受有效 可拖动对象。

希望对您有所帮助!

关于javascript - 拖放 2 个放置目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com