#drag-and-drop #jquery-ui-draggable
#перетаскивание #jquery-ui-draggable
Вопрос:
Я ищу способ предотвратить перетаскивание перетаскиваемого блока на другой перетаскиваемый блок и наоборот. Или, может быть, как определить, что его перетаскивают поверх него.
http://jsfiddle.net/J7azG/27 / Заранее спасибо.
Комментарии:
1. Вы пытаетесь предотвратить перетаскивание на другой или быть отброшенным на другой?
2. Привет, да, вы можете перетащить его на перетаскиваемый, но не на него! В случае сбоя он будет возвращен на свою последнюю позицию.
3. Любая помощь будет оценена =)
Ответ №1:
Я собрал простую демонстрационную версию, которая обнаруживает перекрытия в ваших перетаскиваемых объектах. Поскольку они не поддерживают возврат к условию в событии drop, я создал свой собственный способ сделать это. Вот jsFiddle с рабочим решением
Комментарии:
1. @Keith. Abramo После нескольких перетаскиваний это решение запутывается и не всегда работает. Определенно, происходит ошибка. Иногда перетаскиваемый элемент возвращается обратно, иногда нет. Иногда он застревает поверх другого перетаскиваемого элемента, а затем продолжает возвращаться назад, когда вы пытаетесь перетащить его обратно. То же самое и с первым решением @pravin. Это просто не работает. Решение, которое он опубликовал в своих комментариях, работает хорошо, особенно если вы добавите
tolerance: 'touch'
к удаляемым параметрам.
Ответ №2:
С помощью опции revert, предоставляемой jquery draggable, вы можете изменить положение при недопустимых выпадениях и перекрытии.
Я изменил ответ, данный Китом.Абрамо.
Пожалуйста, не нужно использовать смещение, а не положение, так как во время наложения положение перепутывается.
http://jsfiddle.net/J7azG/177 / Использует опцию возврата
ui.draggable.draggable('option','revert',true);
ui.draggable.draggable('option','revert',false);
Другим решением было бы сделать перетаскиваемый объект удаляемым и использовать для него опцию revert ‘invalid’.
http://jsfiddle.net/htWV3/1219/
HTML
<div class="drop">
<div class="drag"></div>
<div class="drag"></div>
<div class="drag"></div>
<div class="drag"></div>
<div class="drag"></div>
</div>
JS
$('.drop').droppable({
tolerance: 'fit'
});
$('.drag').draggable({
revert: 'invalid',
stop: function(){
$(this).draggable('option','revert','invalid');
}
});
$('.drag').droppable({
greedy: true,
drop: function(event,ui){
ui.draggable.draggable('option','revert',true);
}
});
Отказ от ответственности: я не уверен, кто автор скрипки.
Комментарии:
1. Другой хороший пример заключается в следующем (не уверен, кто автор, хотя) Сделайте перетаскивание удаляемым и верните любой элемент, который был удален на нем. jsfiddle.net/htWV3/1219
2. Честно говоря, ваше решение в приведенном выше комментарии должно быть ответом. Вышеуказанные решения, которые опубликованы в качестве ответов, работают не очень хорошо. Они действительно глючные и с изъянами. Вы должны повторно опубликовать это в качестве ответа.