jquery draggable: ¿cómo limitar el área arrastrable?


Tengo un objeto arrastrable (div), y algunos droppables (table TD's). Quiero que el usuario arrastre mi objeto arrastrable a uno de esos TD droppables.

Habilito arrastrable y droppable de esta manera:

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

El problema es que con esto el usuario puede arrastrar el div a cualquier lugar de la pantalla, incluso fuera del área droppable.

¿Cómo puedo limitar el área límite para el objeto arrastrable?

Author: Brandon, 2010-07-13

5 answers

Utilice la opción "contención":

JQuery UI API-Widget arrastrable-contención

La documentación dice que sólo acepta los valores: 'parent', 'document', 'window', [x1, y1, x2, y2] pero me parece recordar que aceptará un selector como '#contenedor' demasiado.

 88
Author: Mattyod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 13:12:47
$(function() { $( "#draggable" ).draggable({ containment: "window" }); });

De este código no se muestra. Código completo y Demo: http://www.limitsizbilgi.com/div-tasima-surukle-birak-div-drag-and-drop-jquery.html

Para limitar el elemento dentro de su padre:

$( "#draggable" ).draggable({ containment: "window" });
 13
Author: Limitless isa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-03 13:13:33

Aquí hay un ejemplo de código a seguir. # thumbnail es un padre DIV del # handle DIV

buildDraggable = function() {
    $( "#handle" ).draggable({
    containment: '#thumbnail',
    drag: function(event) {
        var top = $(this).position().top;
        var left = $(this).position().left;

        ICZoom.panImage(top, left);
    },
});
 9
Author: mbokil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-29 20:53:14

Véase extracto de la documentación oficial para containment opción :

Contención

Predeterminado: false

Restringe el arrastre dentro de los límites de lo especificado elemento o región.
Múltiples tipos soportados:

  • Selector : El elemento arrastrable estará contenido en el cuadro delimitador del primer elemento encontrado por el selector. Si no se encuentra ningún elemento, no se establecer.
  • Elemento : El elemento arrastrable estará contenido en el cuadro delimitador de este elemento.
  • Cadena : Valores posibles: "parent", "document", "window".
  • Array: Un array que define un cuadro delimitador en la forma [ x1, y1, x2, y2 ].

Ejemplos de Código:
Inicialice el arrastrable con la opción containment especificada:

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

Obtener o establecer la opción containment, después de la inicialización:

// Getter
var containment = $( ".selector" ).draggable( "option", "containment" );
// Setter
$( ".selector" ).draggable( "option", "containment", "parent" );
 0
Author: naXa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 13:24:03
$(function () {
    $( ".droppable-area" ).sortable({
                connectWith: ".connected-sortable",
                containment: ".droppable-area", //(parent div)
                stack: '.connected-sortable div'
            }).disableSelection();
});
 0
Author: Rahul Ratnam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-05 17:53:05