我有一个可拖动的对象(div),以及一些可放置的对象(表格TD)。 我希望用户将我的可拖动对象拖到其中一个可放置的TD上。
我是这样启用可拖动和可放置功能的:
$(".draggable").draggable();
$(".droppable").droppable();
问题是用户可以将 div 拖到屏幕上的任何位置,包括可放置区域之外。如何限制可拖动对象的边界区域?
jQuery UI API - 可拖动小部件 - containment
文档中说它只接受以下值:'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是#handle DIV的父级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 ]
的形式定义边界框的数组。代码示例:
初始化带有指定 containment
选项的可拖动元素:
$( ".selector" ).draggable({
containment: "parent"
});
在初始化后获取或设置 containment
选项:
// 获取器
var containment = $( ".selector" ).draggable( "option", "containment" );
// 设置器
$( ".selector" ).draggable( "option", "containment", "parent" );
$(function () {
$( ".droppable-area" ).sortable({
connectWith: ".connected-sortable",
containment: ".droppable-area", //(parent div)
stack: '.connected-sortable div'
}).disableSelection();
});