Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/09/2018, 01:30
bienpiyao
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 9 meses
Puntos: 3
Drag and drop en varias areas

Muy buenas a todos,

Vaya por delante que soy muy novato en jQuery.

Tengo el siguiente código que funciona perfectamente:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3.       $(".draggable").draggable({
  4.             cursor: "crosshair",
  5.             revert: "invalid",
  6.             helper: 'clone'
  7.       });
  8.  
  9.          $("#drop").droppable({ accept: ".draggable",
  10.         drop: function(event, ui) {
  11.           $("#drop").empty();
  12.             var check = 0;
  13.             // $( "#test" ).droppable( "dragstart", function( event, ui ) {check = 1;} );
  14.  
  15.             var x = event.clientX, y = event.clientY,
  16.             elementMouseIsOver = document.elementFromPoint(x, y);
  17.             var droppable = $(this);
  18.             console.log("drop");
  19.             $(this).removeClass("border").removeClass("over");
  20.             var dropped = ui.draggable;
  21.             var droppedOn = $(this);
  22.  
  23.             console.log($(this).attr('class'));
  24.  
  25.             if(!elementMouseIsOver.classList.contains("clone")) {
  26.                 console.log("no clone");
  27.                 $(dropped).detach().css({top: 0,left: 0}).appendTo("#origin");
  28.                 // dropped.clone().appendTo(droppedOn);
  29.                 var clone = dropped.clone().addClass("clone");
  30.                 //clone[0].id = 'test';
  31.                 clone.appendTo(droppedOn);
  32.             }
  33.         },
  34.         over: function(event, elem) {
  35.             $(this).addClass("over");
  36.             console.log("over");
  37.         },
  38.         out: function(event, elem) {
  39.             $(this).removeClass("over");
  40.         }
  41.     });
  42.       $("#drop").sortable();
  43.  
  44.       $("#origin").droppable({
  45.             accept: ".draggable",
  46.             drop: function(event, ui) {
  47.             console.log("drop");
  48.             $(this).removeClass("border").removeClass("over");
  49.             var dropped = ui.draggable;
  50.             var droppedOn = $(this);
  51.             $(dropped).detach().css({top: 0,left: 0}).appendTo(droppedOn);
  52.       }});
  53. });
  54. </script>

Código HTML:
<body>
    <div id="wrapper">
        <div id="origin" class="fbox">
		<?php

		$sql2 = "SELECT *
				FROM frutas
				LIMIT 10";
							
		$res2 = mysqli_query($conexion,$sql2);
					
		while( $row2 = mysqli_fetch_array( $res2 ) ) 
		{
						
?>
			
			
			<img id="<?php echo $row2["id"];?>" class="draggable" src="imagenes/frutas/<?php echo $row2["nombre"]; ?>.png" width="50" height="50">

			
							
<?php
		
		}
					
?>
        </div>
        
        <div id="drop" class="fbox"></div><div id="drop" class="fbox"></div>
          
    </div>
</body> 
Como digo, este código funciona perfectamente. Tengo 10 imágenes, y una zona a la que arrastrarlas y soltarlas. Cada vez que pongo una, ésta sustituye a la que había antes. Hasta aquí, perfecto.

El problema con el que me encuentro ahora es que me gustaría tener un número indeterminado de zonas en las que poder soltarlas (2, 3, 4, 20, 12, 30...). Me gustaría que cada zona fuera independiente. Había pensado duplicar el código, pero eso no sería buena práctica, seguro que tiene que haber alguna forma de poder hacerlo dinámico.

¿Alguien me puede echar una mano, por favor?

Gracias por anticipado!!