2011-07-11 10 views
6

i tienenjQuery UI eje restricción que pueden arrastrarse ina x y coordenadas dadas

<style> 
.container { position:relative; width:600px; height:400px; overflow:hidden; } 

.div-inner { position:absolute; top:0px; left:0px; width:7200px; cursor:e-resize; } 

</style> 

$ ("div-interior.") Que pueden arrastrarse ({ejes: "x"}).;

<div class="container"> 
    <div class="div-inner">Drag me!</div> 
    </div> 

Quiero restringir el movimiento hacia la izquierda y hacia la derecha de 7200 píxeles de ancho del div interior.

si fuera un elemento desplazable, lo dejaría desplazarse desde la izquierda: 0px; a la izquierda: (7200-600) px;

¿Cómo puedo hacerlo con arrastrar?

¡Muchas gracias!

Respuesta

13

he encontrado una solución:

$(".div-inner").draggable({ axis: "x", 

    stop: function(event, ui) { 
     if(ui.position.left>0) 
     { 
     //alert('Return back'); 
     $(".div-inner").animate({"left": "0px"}, 600); 
     } 
     else if(ui.position.left<-6800) 
     { 
      $(".div-inner").animate({"left": "-6400px"}, 600); 
     }             
    } 
+1

Gracias por la solución. Parece que con una biblioteca que ha existido siempre y cuando jQueryUI tenga esto, debería ser parte de la API. – todd

+0

Por cierto, en mi experiencia, este código no parece ser compatible con la opción [_containment_] (http://api.jqueryui.com/draggable/#option-containment) de la API que se puede arrastrar (jQuery UI 1.10.3) . Cuando tiene la opción de contención establecida junto con este código, el contenido simplemente saltará de principio a fin. – todd

+0

realmente? ¡Gracias por el aviso! Esto se usa en versiones anteriores. – dtakis

3

Hay varios ejemplos de movimiento limitado en la documentación de jQuery UI: http://jqueryui.com/demos/draggable/constrain-movement.html

$(function() { 
    $("#draggable").draggable({ axis: "y" }); 
    $("#draggable2").draggable({ axis: "x" }); 

    $("#draggable3").draggable({ containment: "#containment-wrapper", scroll: false }); 
    $("#draggable4").draggable({ containment: "#demo-frame" }); 
    $("#draggable5").draggable({ containment: "parent" }); 
}); 

Ambos pueden contener draggables a 'padre', 'documento', 'ventana', [x1, y1, x2 , y2], un elemento o un selector. También puede permitir solo el movimiento del eje xo y.

+0

He leído la documentatio jqueryui y no puedo hacer que funcione. El primer paso es restringir el eje x como lo hice. Tal vez algo con [x1, y1, x2, y2] funcionará, pero no he logrado que funcione. Gracias por tu tiempo de todos modos! – dtakis

+0

No estoy muy seguro de por qué su contenedor es más pequeño que el ancho de su elemento interno. ¿Es algo como http://jsfiddle.net/Akkuma/zdJws/ lo que estás buscando lograr? – Akkuma

+0

No, mi propósito es tener una ventana gráfica donde el interior sea la información que se puede arrastrar. Imagine que el contenedor es una ventana de tiempo que tiene dentro de todos los días eventos como una línea de tiempo. El contenedor es pequeño, así que puedo arrastrar la información dentro. [============= [<- Vista actual ->] ======================= ======] – dtakis

Cuestiones relacionadas