【发布时间】:2010-06-14 09:43:18
【问题描述】:
看起来Draggable的构造函数中的'grid'选项相对绑定到被拖动元素的原始坐标 - 简单地说,如果你有三个可拖动的div,它们的top 相对于其父级分别设置为 100、200、254 像素:
<div class="parent-div" style="position: relative;">
<div id="div1" class="draggable" style="top: 100px; position: absolute;"></div>
<div id="div2" class="draggable" style="top: 200px; position: absolute;"></div>
<div id="div3" class="draggable" style="top: 254px; position: absolute;"></div>
</div>
所有这些都可以在“网格”设置为 [1, 100] 的情况下进行拖动:
draggables = $('.draggable');
$.each(draggables, function(index, elem) {
$(elem).draggable({
containment: $('#parent-div'),
opacity: 0.7,
revert: 'invalid',
revertDuration: 300,
grid: [1, 100],
refreshPositions: true
});
});
这里的问题是,只要你拖动 div3,比如说,向下拖动,它的顶部就会增加 100,移动到 354px 而不是仅仅增加46px (254 + 46 = 300),如果我们查看 parent-div 作为参考点和“网格持有者”。
我查看了可拖动源,它似乎是一个内置缺陷 - 它们只是相对于可拖动元素的原始位置进行所有计算。
我想避免猴子修补可拖动库的代码,我在这里真正寻找的是如何使 Draggable 计算相对于包含父级的网格位置的方法。但是,如果猴子补丁是不可避免的,我想我将不得不忍受它。
【问题讨论】:
标签: javascript jquery drag-and-drop jquery-ui-draggable quirks-mode