2010-04-12 7 views
5

Tôi đang sử dụng giao diện người dùng jquery và jQuery draggable, tất cả draggables của tôi sử dụng jquery bản sao helper và gắn thêm các kéo-droppable.jQuery Draggables và Droppables vị

Đây là mã của tôi

$('#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, 
    }); 
    } 
}); 

Tôi đang thiết vị trí của các bản sao với .css('top', ui.absolutePosition.top);css('left', ui.absolutePosition.left); nhưng vị trí này là tương đối so với BODY.

Vị trí không liên quan đến phân đoạn có thể kéo thả xuống các vị trí ngẫu nhiên. Nhìn chung, sự tích hợp có thể phân hủy và có thể kéo được không chặt chẽ. Tôi muốn làm cho nó mượt mà hơn.

Trả lời

10

Tôi nhận được độ lệch của phần thân và trừ nó khỏi phần bù của bản sao phụ tùng.

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

Nó hoạt động!

+1

nơi biến droppableOffset là jQuery ('# squeezePage #droppable'). Offset(); – Haris

+0

Tôi đã dành rất nhiều giờ tìm kiếm một giải pháp tương tự .. cảm ơn bạn rất nhiều. –