Я не уверен, как добиться того, что я пытаюсь сделать. Здесь я приведу пример:
$('.draggable').draggable({
revert: 'invalid'
});
$('#droppable').droppable({
accept: '.draggable'
});
Зеленый флажок действителен. Красная коробка - нет. Если перетаскиваемый снижается на красный, даже красный, который находится поверх зеленого, я хочу, чтобы он был недействительным и возвращался. В этом примере это не работает.
Достижимо ли это? Я прикрепил API и другие вопросы и не смог найти ответ.
Просто добавьте оба элемента в раскрывающиеся типы, а затем отметьте элемент, на который он был сброшен. Если это block
, то верните.
$('.draggable').draggable({
revert: 'invalid'
});
$('#droppable, #block').droppable({
accept: '.draggable',
drop: function( event, ui ) {
if (this.id == 'block') {
ui.draggable.draggable({ revert: true });
} else {
ui.draggable.draggable({ revert: "invalid"});
}
}
});
Принятое решение чище, но имеет 1 проблему. Как только Draggable выпадет над зеленой зоной, он будет beocome Droppable даже на белом фоне... (Примечание revert: false
)
Обновляет этот ответ с помощью правильного кода.
$('.draggable').draggable({
revert: 'invalid'
});
$('#droppable, #block').droppable({
accept: '.draggable',
drop: function( event, ui ) {
if(!ui.draggable.data('original')){
ui.draggable.data('original',ui.draggable.draggable("option", "revert"));
}
if (this.id == 'block') {
ui.draggable.draggable({ revert: true });
} else {
ui.draggable.draggable({ revert: ui.draggable.data('original') });
}
}
});
Похоже, у этого вопроса уже есть ответ. но вот моя попытка решить ту же проблему.
$('#block').droppable({
accept: '.draggable',
drop: function (event, ui) {
if (ui.draggable.data('revert')) {
ui.draggable.data('revert', false);
var old = ui.draggable.draggable("option", "revert");
ui.draggable.draggable("option", "revert", true);
setTimeout(function () {
ui.draggable.draggable("option", "revert", old);
}, 100);
}
},
out: function (event) {
$('.draggable').data('revert', false);
},
over: function (event,ui) {
ui.draggable.data('revert', true);
}
});
$('#droppable').droppable({
accept: function (elem) {
if ($('.draggable').data('revert')) {
return false;
}
return elem.hasClass("draggable");
}
});
$('.draggable').draggable({
revert: 'invalid'
});
Может быть обходным путем:
http://jsfiddle.net/zs6US/4/show
$('.draggable').draggable({
revert: 'invalid'
});
$('#droppable').droppable({
accept: '.draggable',
drop: function (e, ui) {
ui.draggable.hide();
console.log(ui);
var target = document.elementFromPoint(ui.offset.left, ui.offset.top);
if (!target || target.id != "droppable") ui.draggable.draggable({
revert: true
});
else ui.draggable.draggable({
revert: false
});
ui.draggable.show();
}
});
revert: false
Посмотрите, мой naswer, он решил эту проблему