2010-04-12 9 views
5

J'utilise l'interface utilisateur jquery et jQuery draggable, tous mes draggables utiliser jquery clone aide et ajoute le draggable-largable.jQuery draggables et droppables Positionnement

Voici mon code

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

Je réglage de la position du clone avec .css('top', ui.absolutePosition.top); et css('left', ui.absolutePosition.left); mais la position est par rapport au corps.

La position n'est pas relative à la droppable qui fait tomber le draggable à des endroits aléatoires. Dans l'ensemble, l'intégration des solutions de rechange et des solutions déplaçables n'est pas stricte. Je veux le rendre plus lisse.

Répondre

10

Je récupère le décalage du corps et le soustrais du décalage du clone du widget.

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

Cela fonctionne!

+1

où variable droppableOffset est jQuery ('# squeezePage #droppable'). Offset(); – Haris

+0

J'ai passé tant d'heures à chercher une solution similaire .. merci beaucoup. –