jQuery draggable: как ограничить область перетаскивания?
У меня есть перетаскиваемый объект (div) и некоторые сбрасываемые (таблица TD). Я хочу, чтобы пользователь перетащил мой перетаскиваемый объект на один из этих droppable TD.
Я включаю draggable и droppable таким образом:
$(".draggable").draggable();
$(".droppable").droppable();
проблема в том, что при этом пользователь может перетащить div в любом месте экрана, в том числе из области droppable.
Как я могу ограничить граничную область для перетаскиваемого объекта?
5 ответов:
используйте опцию "сдерживание":
jQuery и API для пользовательского интерфейса - виджет можно перетаскивать по сдерживанию
в документации говорится, что он принимает только значения:
'parent'
,'document'
,'window'
,[x1, y1, x2, y2]
но я, кажется, помню, что он будет принимать селектор, такой как' #container ' тоже.
$(function() { $( "#draggable" ).draggable({ containment: "window" }); });
этот код не отображается. Полный код и демо: http://www.limitsizbilgi.com/div-tasima-surukle-birak-div-drag-and-drop-jquery.html
чтобы ограничить элемент внутри его родителя:
$( "#draggable" ).draggable({ containment: "window" });
вот пример кода для выполнения. # thumbnail является родителем DIV для # handle DIV
buildDraggable = function() { $( "#handle" ).draggable({ containment: '#thumbnail', drag: function(event) { var top = $(this).position().top; var left = $(this).position().left; ICZoom.panImage(top, left); }, });
см. выдержку из официальной документации для
containment
опции:локализация
по умолчанию:
false
ограничивает перетаскивание в пределах указанных границ элемент или регион.
поддерживается несколько типов:
- селектор: перетаскиваемый элемент будет содержаться в ограничительной рамке первого найденного элемента по селектору. Если элемент не найден, то не будет установлено никакое сдерживание.
- элемент: перетаскиваемый элемент будет содержаться в ограничительной рамке этого элемента.
- строка: возможные значения:
"parent"
,"document"
,"window"
.- массив: массив, определяющий ограничивающую рамку в виде
[ x1, y1, x2, y2 ]
.примеры кода:
Инициализировать перетаскиваемый с помощью элемент указано:$( ".selector" ).draggable({ containment: "parent" });
получить или установить
containment
опции, после инициализации:// Getter var containment = $( ".selector" ).draggable( "option", "containment" ); // Setter $( ".selector" ).draggable( "option", "containment", "parent" );