私はドロップ可能な領域[[A、B] [C、D]]の2x2グリッドを持っていて、グリッドの下にはドラッグ可能な1x4グリッドがあります。私はお互いの隣に特定のドラッググッズを置いておきたい。たとえば、Bにドラッグ可能なものがあり、Aに別のドラッグ可能なものをドラッグすると、Bでドラッグ可能にする方法はありますか? draggablesにはdata-rowとdata-colがありますので、必要に応じてprev/nextカラムのdraggableをつかむことができます。異なるドラッグ可能なものが取り除かれた後にドラッグ可能に戻す
$(".draggable").draggable({
scroll: false,
snap: ".snaptarget",
snapMode: "inner",
stack: ".draggable",
revert: function (event, ui) {
var $draggable = $(this);
$draggable.data("uiDraggable").originalPosition = {
top: 0,
left: 0
};
return !event;
}
});
$(".snaptarget").droppable({
accept: ".draggable",
drop: function (event, ui) {
var $draggable = $(ui.draggable);
var $droppable = $(this);
// This droppable is taken, so don't allow other draggables
$droppable.droppable('option', 'accept', ui.draggable);
ui.draggable.position({
my: "center",
at: "center",
of: $droppable,
using: function (pos) {
$draggable.animate(pos, "fast", "linear");
}
});
// Disable prev or next droppable if the pagewidth == 1
if ($droppable.data("col") == 1) {
$droppable.next().droppable("option", "disabled", true);
var nextDrag = $(".draggable[data-row='" + $droppable.data("row") + "'][data-col='2']");
if (nextDrag.length) {
// I need to revert nextDrag if there is one.
// I've tried this but it doesn't seem to work
nextDrag.data("uiDraggable").originalPosition = {
top: 0,
left: 0
}
}
}
},
tolerance: "pointer"
});
あなたが考えているかもしれない方法で、別のdraggableの 'revert'を実行する方法はありません。次の要素をチェックするには 'stop'または' drop'でチェックを実行できます。必要に応じて、悪いdivの動きを開始点または起点にアニメートできます。 – Twisty
@Twisty私はそれを次に見ていましたが、方法があるかどうかをチェックしていました。ありがとう。 – homes
'revert '経由ではありません。あなたは正しい道を歩いています。私はテストのためにこのフィドルを作成しました:https://jsfiddle.net/Twisty/a4ucb6y3/ – Twisty