2010-04-12 88 views
5

我使用jQuery UI和jQuery draggable,我所有的拖拽元素使用jquery 克隆助手并追加拖动可放开jQuery的拖拽元素和Droppables定位

这里是我的代码

$('#squeezePage #droppable').droppable({ 
    tolerance: 'fit', 
    accept: '#squeezeWidgets .squeezeWidget', 
    drop: function(event, ui) { 
    var dropElem = ui.draggable.html(); 

    var clone = $(dropElem).clone(); 

    clone.css('position', 'absolute'); 
    clone.css('top', ui.absolutePosition.top); 
    clone.css('left', ui.absolutePosition.left); 

    $(this).append(clone); 

    $(this).find('.top').remove(); 
    $(this).find('.widgetContent').slideDown('fast'); 

    $(this).find('.widgetContent').draggable({ 
    containment: '#squeezePage #droppable', 
    cursor: 'crosshair', 
    grid: [20, 20], 
    scroll: true, 
    snap: true, 
    snapMode: 'outer', 
    refreshPositions: true 
    }); 

    $(this).find('.widgetContent').resizable({ 
    maxWidth: 560, 
    minHeight: 60, 
    minWidth: 180, 
    grid: 20, 
    }); 
    } 
}); 

我设置克隆的位置.css('top', ui.absolutePosition.top);css('left', ui.absolutePosition.left);,但位置是相对于身体。

该位置不是相对于可拖动的拖放到随机位置的droppable。总而言之,可拖拽和可拖动的集成并不严密。我想让它更平滑。

回答

10

我得到身体的偏移量,并从部件克隆的偏移量中减去它。

 clone.css('top', ui.position.top - droppableOffset.top); 
     clone.css('left', ui.position.left - droppableOffset.left); 

它的工作原理!

+1

其中droppableOffset变量是jQuery('#squeezePage #droppable')。offset(); – Haris 2010-04-13 11:46:15

+0

我花了很多时间寻找类似的解决方案..非常感谢。 – 2015-09-18 17:20:55