2010-04-12 114 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