55 votes

jquery draggable : comment limiter la zone de draguage ?

J'ai un objet pouvant être déplacé (div), et d'autres pouvant être déposés (tables TD). Je veux que l'utilisateur fasse glisser mon objet glissant vers l'un de ces TD déposables.

J'active les fonctions "dragable" et "droppable" de cette façon :

$(".draggable").draggable();
$(".droppable").droppable();

Le problème est qu'avec cette méthode, l'utilisateur peut faire glisser la division n'importe où sur l'écran, y compris en dehors de la zone de dépôt.

Comment puis-je limiter la zone de délimitation de l'objet glissant ?

101voto

Mattyod Points 670

Utilisez l'option "confinement" :

jQuery UI API - Widget Draggable - confinement

La documentation indique qu'il n'accepte que les valeurs : 'parent' , 'document' , 'window' , [x1, y1, x2, y2] mais je crois me souvenir qu'il accepte également un sélecteur tel que "#container".

0 votes

J'ai fait thums up ami. Tu m'as beaucoup sauvé ;) J'ai résolu le problème en lisant la première ligne et sa valeur recommandée dans ta réponse.

0 votes

Mais il n'accepte pas les sélectionneurs. Même si je saisis un sélecteur, il glisse au-delà de ce sélecteur. Y a-t-il un autre moyen de faire cela ? Quoi qu'il en soit, j'ai levé le pouce !

0 votes

@Mattyod comment faire sans confinement ?

17voto

Limitless isa Points 270
$(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" });

1 votes

Merci de poster votre réponse ! Veillez à lire le FAQ sur l'autopromotion soigneusement. Notez également qu'il est requis que vous affichiez une clause de non-responsabilité chaque fois que vous créez un lien vers votre propre site/produit.

11voto

mbokil Points 566

Voici un exemple de code à suivre. #thumbnail est un DIV parent du 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);
    },
});

0voto

naXa Points 862

Voir l'extrait de la documentation officielle de containment option :

confinement

Par défaut : false

Limite le déplacement à l'intérieur des limites de l'élément ou de la région spécifié(e). élément ou de la région.
Plusieurs types sont pris en charge :

  • Sélecteur : L'élément glissable sera contenu dans la boîte englobante du premier élément trouvé par le sélecteur. Si aucun élément n'est trouvé, aucun confinement ne sera défini.
  • Élément : L'élément glissant sera contenu dans la boîte de délimitation de cet élément.
  • Chaîne de caractères : Valeurs possibles : "parent" , "document" , "window" .
  • Array : Un tableau définissant une boîte de délimitation sous la forme [ x1, y1, x2, y2 ] .

Exemples de codes :
Initialiser le draggable avec l'élément containment spécifiée :

$( ".selector" ).draggable({
    containment: "parent" 
}); 

Obtenez ou définissez le containment après l'initialisation :

// Getter
var containment = $( ".selector" ).draggable( "option", "containment" );
// Setter
$( ".selector" ).draggable( "option", "containment", "parent" );

0 votes

Qu'en est-il des éléments spécifiques ? je ne veux pas ajouter "parent", "document", "window"

0voto

Rahul Ratnam Points 1
$(function () {
    $( ".droppable-area" ).sortable({
                connectWith: ".connected-sortable",
                containment: ".droppable-area", //(parent div)
                stack: '.connected-sortable div'
            }).disableSelection();
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X