我在一个简单的无序列表上实现了 jQuery UI 的 Sortable 插件。有没有办法确定哪个元素在被拖动的元素下面?
在这个截图中Row 3, column 1
正在盘旋Row 2-3, column 1
。在这种情况下;我需要抓住Row 2-3, column 1
.
(source: roosteronacid.com)
我听了之后提出了一个解决方案mousemove
拖动可排序对象时发生事件。在 mousemove 上,它会检查中的所有元素sortables
以及当前拖动的元素是否悬停在其上方(以零容差与其相交 - 如果它覆盖元素一个像素,则相交)。该代码非常复杂,因此您可以看到正在做什么。如果可排序元素有其宽度、边框等,则交集计算可能会有点偏差,因为width()
and height()
在这种情况下不返回正确的值
这是一个演示:http://jsfiddle.net/Vwd3r/2/
var sortables = $("li");
var draggedItem;
$("#sort").sortable({
start: function(event, ui) {
draggedItem = ui.item;
$(window).mousemove(moved);
},
stop: function(event, ui) {
$(window).unbind("mousemove", moved);
}
});
function moved(e) {
//Dragged item's position++
var d = {
top: draggedItem.position().top,
bottom: draggedItem.position().top + draggedItem.height(),
left: draggedItem.position().left,
right: draggedItem.position().left + draggedItem.width()
};
//Find sortable elements (li's) covered by draggedItem
var hoveredOver = sortables.not(draggedItem).filter(function() {
var t = $(this);
var pos = t.position();
//This li's position++
var p = {
top: pos.top,
bottom: pos.top + t.height(),
left: pos.left,
right: pos.left + t.width()
};
//itc = intersect
var itcTop = p.top <= d.bottom;
var itcBtm = d.top <= p.bottom;
var itcLeft = p.left <= d.right;
var itcRight = d.left <= p.right;
return itcTop && itcBtm && itcLeft && itcRight;
});
};
注意sortables
不限于可排序的项目,它可以是页面上的任何元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)