2010-04-12 11 views
5

estoy usando la interfaz de usuario jQuery y jQuery draggable, todos mis draggables usar jQuery clon ayudante y añade el pueda arrastrar a lanzables.jQuery Draggables y Droppables Posicionamiento

Aquí está mi código

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

Estoy fijando la posición del clon con .css('top', ui.absolutePosition.top); y css('left', ui.absolutePosition.left); pero la posición es relativa al cuerpo.

La posición no es relativa al droppable que hace que la caída sea arrastrable a lugares aleatorios. En general, la integración que se puede arrastrar y arrastrar no es estrecha. Quiero hacerlo más suave.

Respuesta

10

Obtengo el desplazamiento del cuerpo y lo resta del desplazamiento del clon del widget.

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

¡Funciona!

+1

donde la variable droppableOffset es jQuery ('# squeezePage #droppable'). Offset(); – Haris

+0

Pasé tantas horas buscando una solución similar ... muchas gracias. –