2012-07-30 8 views
8

tengo que ser capaz de tomar un elemento que se establece como arrastrable y físicamente mover ese elemento en el recipiente en lugar de sólo la superposición como la funcionalidad actual hace.jQuery que pueden arrastrarse + lanzables - Mueva físicamente elemento arrastrado en un recipiente caído

Así, por ejemplo:

<div class="container"></div> 
<div class="image"> 
    <img class="thumb" src="images/Koala.jpg" alt="" /> 
</div> 

$(function() { 
    $(".image").draggable(); 
    $(".container").droppable({ 
     drop: function (event, ui) { 
      alert('dropped!'); 
     } 
    }); 
}); 

Así que después de que la imagen haya sido arrastrado y soltado en el 'contenedor' div necesito el elemento HTML real que ser trasladado allí.

Así que después de producido el evento, si tuviera que mirar a la fuente usando herramientas de Chrome dev me gustaría ver:

<div class="container"> 
    <div class="image"> 
     <img class="thumb" src="images/Koala.jpg" alt="" /> 
    </div> 
</div> 

Es esto posible?

Gracias

+0

Nunca verá cambios de JS en el dom en la vista de origen. Sin embargo, puede ver los cambios en las herramientas de desarrollo de su navegador. – DanielB

+0

Sí, eso es lo que quise decir. Voy a revisar mi pregunta. – Jared

Respuesta

6

Esto debe mover el elemento arrastrado a la droppable en el árbol dom.

drop: function (event, ui) { 
    $(this).append(ui.draggable); 
} 
+2

Esto lo pone dentro del objeto DOM, pero (ver la respuesta de mi ejemplo), el que se puede arrastrar queda con CSS que lo coloca visualmente fuera del contenedor. – saluce

+0

@saluce: Esto depende de las definiciones CSS que ya existan. Tal vez el OP tiene una definición, que deja flotar todas las imágenes en .container, y luego no necesita establecer ningún CSS adicional. – DanielB

2

En la función de descenso, $(this) es el lanzables aceptar el que pueden arrastrarse, por lo que sólo tiene que utilizar .append() para añadir el que pueden arrastrarse a la lanzables: http://jsfiddle.net/saluce/P6TjC/

$(function() { 
    $(".image").draggable({helper: 'original'}); 
    $(".container").droppable({ 
     drop: function (event, ui) { 
      $(this).append(ui.draggable.css({position: 'static'})); 
      alert('dropped!'); 
     } 
    }); 
});​ 
+3

'estático' causó problemas al continuar arrastrando el elemento. Usé: $ (this) .append (ui.draggable.css ({position: "relative", top: "", left: ""})); – Florian

Cuestiones relacionadas