J’ai un object draggable (div) et quelques objects droppables (table TD). Je veux que l’utilisateur fasse glisser mon object déplaçable vers l’un de ces TD.
J’autorise draggable et droppable de cette façon:
$(".draggable").draggable(); $(".droppable").droppable();
Le problème est que l’utilisateur peut faire glisser le div n’importe où sur l’écran, y compris hors de la zone de repository.
Comment puis-je limiter la zone limite de l’object déplaçable?
Utilisez l’option “confinement”:
API de l’interface utilisateur jQuery – Widget Draggable – confinement
La documentation indique qu’elle accepte uniquement les valeurs: 'parent'
, 'document'
, 'window'
, [x1, y1, x2, y2]
mais je pense me souvenir qu’elle acceptera un sélecteur tel que ‘#container’.
$(function() { $( "#draggable" ).draggable({ containment: "window" }); });
de ce code ne s’affiche pas. Code complet et démo: http://www.limitsizbilgi.com/div-tasima-surukle-birak-div-drag-and-drop-jquery.html
Afin de limiter l’élément à l’intérieur de son parent:
$( "#draggable" ).draggable({ containment: "window" });
Voici un exemple de code à suivre. #thumbnail est un parent DIV de la DIV #handle
buildDraggable = function() { $( "#handle" ).draggable({ containment: '#thumbnail', drag: function(event) { var top = $(this).position().top; var left = $(this).position().left; ICZoom.panImage(top, left); }, });
Voir l’extrait de la documentation officielle pour l’ option de containment
:
endiguement
Par défaut:
false
Contrainte de glisser dans les limites de l’élément ou de la région spécifiée.
Plusieurs types pris en charge:
- Sélecteur : L’élément déplaçable sera contenu dans le cadre de sélection du premier élément trouvé par le sélecteur. Si aucun élément n’est trouvé, aucun confinement ne sera défini.
- Elément : L’élément draggable sera contenu dans le cadre de sélection de cet élément.
- Chaîne : Valeurs possibles:
"parent"
,"document"
,"window"
.- Tableau : Tableau définissant un cadre de sélection sous la forme
[ x1, y1, x2, y2 ]
.Exemples de code:
Initialiser le draggable avec l’option decontainment
spécifiée:$( ".selector" ).draggable({ containment: "parent" });
Obtenir ou définir l’option de
containment
, après l’initialisation:// Getter var containment = $( ".selector" ).draggable( "option", "containment" ); // Setter $( ".selector" ).draggable( "option", "containment", "parent" );
$(function () { $( ".droppable-area" ).sortable({ connectWith: ".connected-sortable", containment: ".droppable-area", //(parent div) stack: '.connected-sortable div' }).disableSelection(); });