gpt4 book ai didi

jQuery 可排序且可放置

转载 作者:行者123 更新时间:2023-12-01 00:53:08 26 4
gpt4 key购买 nike

我的 fiddle :http://jsfiddle.net/Yc9WY/42/

您将在这里看到两个组,每个组定义了 3 个可放置的容器。您可以将事件从组 1 移至组 2,并移至任何槽位。这工作得很好。

一旦组已满,我希望用户能够通过上下移动事件来对该组进行排序。如果他们选择的话,他们仍然应该能够将事件移出组。

您将看到我注释掉的代码,我开始集成可排序库,但出现了奇怪的行为。

注意:我不能仅用可排序替换可拖动/可放置。我需要明确定义的可放置区域(每组 3 个),以便事件可以存在于组 1 的插槽 1 和 3 中。

这是我的代码

$(document).ready(function() {

// $(".sort").sortable({
// revert: true
// });

$(".drag").draggable({
//connectToSortable: ".sort",
revert: true
//helper: clone
});

$(".sort").droppable({
drop: function(event, ui) {

if (!($(this).children(".drag").size() == 1)) {
$(this).append(ui.draggable);

ui.draggable.css({
left: 0,
top: 0
});
}
}

});
});

<div>Group 1:
<ul class="parent">
<li class="sort"><a href="" class="drag">event 1</a></li>
<li class="sort"><a href="" class="drag">event 2</a></li>
<li class="sort"></li>
</ul>
</div>
<div>
Group 2
<ul class="parent">
<li class="sort"></li>
<li class="sort"><a href="" class="drag">event 3</a></li>
<li class="sort"><a href="" class="drag">event 4</a></li>
</ul>
</div>

我真的很苦恼,谢谢大家!

最佳答案

我破解了它:)

fiddle (和 CSS): http://jsfiddle.net/jhogervorst/CPA5Y/

HTML:

<div class="group">
<h1>Group 1</h1>

<ul class="parent">
<li class="droppable"><span class="draggable">Item 1</span></li>
<li class="droppable"><span class="draggable">Item 2</span></li>
<li class="droppable"></li>
</ul>
</div>

<div class="group">
<h1>Group 2</h1>

<ul class="parent">
<li class="droppable"><span class="draggable">Item 3</span></li>
<li class="droppable"></li>
<li class="droppable"><span class="draggable">Item 4</span></li>
</ul>
</div>​

JavaScript:

$(".draggable").draggable({
revert: true,
revertDuration: 0
});

$(".droppable").droppable({
activeClass: "active",
hoverClass: "hover",

accept: function (draggable) {
// The droppable (li element).
var droppable = $(this);

// The droppable which contains the draggable, i.e., the parent element of the draggable (li element).
var draggablesDropable = draggable.parent();

// Is the draggable being dragged/sorted to the same group?
// => We could just sort it, because there's always enough space inside the group.
if (droppable.parent().is(draggablesDropable.parent())) {
return true;
}

// Nope, the draggable is being dragged/sorted to another group.
// => Is there an empty droppable left in the group to which the draggable is being dragged/sorted?
else if (droppable.parent().find(".draggable").size() < droppable.parent().find(".droppable").size()) {
return true;
}

// Nothing true?
return false;
},

drop: function(event, ui) {
// The droppable (li element).
var droppable = $(this);

// The draggable (span element).
var draggable = ui.draggable;

// The droppable which contains the draggable, i.e., the parent element of the draggable (li element).
var draggablesDropable = draggable.parent();

// Is the draggable being dragged to it's own droppable?
// => Abort, there's nothing to drag/sort!
if (droppable.is(draggablesDropable)) {
return;
}

// Is the draggable being dragged to an empty droppable?
else if (!droppable.find(".draggable").size()) {
// Just drop the draggable there.
droppable.append(draggable);
}

// Is the draggable being dragged/sorted to the same group?
// => We can just sort it, because there's always enough space inside the group.
else if (droppable.parent().is(draggablesDropable.parent())) {
// Is the draggable being dragged up?
if (droppable.parent().find(".droppable").index(draggablesDropable) > droppable.parent().find(".droppable").index(droppable)) {
// Add the dragged draggable's droppable before the droppable.
draggablesDropable.insertBefore(droppable);
}

// No, the draggable is being dragged down.
else {
// Add the dragged draggable's droppable after the droppable.
draggablesDropable.insertAfter(droppable);
}
}

// Nope, the draggable is being dragged/sorted to another group.
// => Is there an empty droppable left in the group to which the draggable is being dragged/sorted?
else if (droppable.parent().find(".draggable").size() < droppable.parent().find(".droppable").size()) {
// Find the first empty droppable in which the draggable is being dragged/sorted.
var emptyDroppable = $($.grep(droppable.parent().find(".droppable"), function (item) {
// Are there draggables inside this droppable?
// => Return TRUE if not.
return !$(item).find(".draggable").size();
})).first();

// Clone the dragged draggable's droppable before itself, because we need to remember it's position after moving it.
var draggablesDropableClone = draggablesDropable.clone().insertBefore(draggablesDropable);

// Is the draggable being dragged above the empty droppable?
if (droppable.parent().find(".droppable").index(emptyDroppable) > droppable.parent().find(".droppable").index(droppable)) {
// Add the dragged draggable's droppable before the droppable.
draggablesDropable.insertBefore(droppable);
}

// No, the draggable is being dragged below the empty droppable.
else {
// Add the dragged draggable's droppable after the droppable.
draggablesDropable.insertAfter(droppable);
}

// Remove the position of the dragged draggable, because there's still some css left of the dragging.
draggable.css({"top": 0, "left": 0});

// Add the first empty droppable before the cloned draggable's droppable. Remove the latter afterwards.
draggablesDropableClone.before(emptyDroppable).remove();
}
}
});​

关于jQuery 可排序且可放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10341875/

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