我找到了一种方法来实现这一点。尽管jQuery UI draggables/droppables API没有选项,但我通过添加唯一的“id”属性来跟踪可拖动和可拖放的属性,以便跟踪它们。
这里是我走近如下:
此举可拖动到可投放
我的方法:找到目标可投放的坐标,并更新了可拖动的CSS 。
要弄清楚哪些牵引被拖和滴管收到了,我添加的属性dragger-id
和dropper-id
,所以我可以drop事件中识别他们:
drop: function(event, ui){
// Get the current dragger and dropper ID's
dropperId = $(this).attr('dropper-id');
draggerId = ui.draggable.attr('dragger-id');
// ... more code
}
然后我计算的顶部和左侧坐标拖动器基于droppable的值。为此,我使用了jQuery的offset()
方法。
drop_x = $('.droppable').offset().left - $('.draggable').offset().left;
drop_y = $('.droppable').offset().top - $('.draggable').offset().top;
注意:由于draggables相对于它们的起始位置,我必须进行差异计算。
最后,我设置了top
和left
CSS值:
ui.draggable.css('top', drop_y+'px'); // y-axis
ui.draggable.css('left', drop_x+'px'); // x-axis
知道是否可投放已经拥有了可拖动,并且能够识别可拖动
为此,我在droppable元素上创建了另一个属性来跟踪dragger-id
值。我叫它current-dragger
,这样它就会是唯一的,我可以通过它进行查询。我用-1
作为我的默认值,意思是“没有拖拉机”。
我在滴法分配current-dragger
还有:
drop: function(event, ui){
// Get the current dragger and dropper ID's
dropperId = $(this).attr('dropper-id');
draggerId = ui.draggable.attr('dragger-id');
// Remove current-dragger value from old dropper (-1 means no dragger)
$('[current-dragger="' + draggerId + '"]').attr('current-dragger', '-1');
// Update current-dragger on this dropper
$(this).attr('current-dragger', draggerId);
// ... more code
}
我想真的没有必要做更新到DOM属性,所以在督促我将全程跟踪一个JavaScript映射内部的电流牵引目的。
对于一个完整的工作示例,see my updated plunk
好吧,我是对的,那么这涉及一起使用和添加数据属性跟踪谁在这里可放开的下跌事件的组合接线的事情。工作时会提供答案 –