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" );