Foros del Web » Programando para Internet » Jquery »

Drag and drop en varias areas

Estas en el tema de Drag and drop en varias areas en el foro de Jquery en Foros del Web. Muy buenas a todos, Vaya por delante que soy muy novato en jQuery. Tengo el siguiente código que funciona perfectamente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : ...
  #1 (permalink)  
Antiguo 18/09/2018, 01:30
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 15 años, 3 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!!
  #2 (permalink)  
Antiguo 18/09/2018, 09:48
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Drag and drop en varias areas

Estás haciendo "droppable" a elementos dentro de la página que tienen el mismo id, cambia y hazlo por una clase y no por su id.

en relación a la solicitud, pues como mismo haces una iteración pintando elementos dede php, pudieras desde el javascript hacer una iteración por todos los elementos que quieres sean droppables o dragables si asi fuera el caso, y le asignas la funcionalidad o el evento:

Código PHP:
Ver original
  1. <?php
  2. while( $row2 = mysqli_fetch_array( $res2 ) )
  3.         {                      
  4. ?>
  5.            
  6.            
  7.             <img id="<?php echo $row2["id"];?>" class="droppables" src="imagenes/frutas/<?php echo $row2["nombre"]; ?>.png" width="50" height="50">        
  8.                            
  9. <?php
  10.        
  11.         }
  12.                    
  13. ?>


Código Javascript:
Ver original
  1. $(".droppables").each(i){
  2.      var id = $(this).prop("id"); // asi tienes el id del elemento en cuestion para si lo necesitas enviar al servidor via ajax, imagino te haga falta
  3.      $(this).droppable({
  4.         ......
  5.      });
  6. };


muy similar a este, pero con los elementos draggables y todos los comportameintos que necesites asignarle a tus div

Última edición por X_fran; 18/09/2018 a las 09:54
  #3 (permalink)  
Antiguo 19/09/2018, 01:01
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: Drag and drop en varias areas

Cita:
Iniciado por X_fran Ver Mensaje
Estás haciendo "droppable" a elementos dentro de la página que tienen el mismo id, cambia y hazlo por una clase y no por su id.

en relación a la solicitud, pues como mismo haces una iteración pintando elementos dede php, pudieras desde el javascript hacer una iteración por todos los elementos que quieres sean droppables o dragables si asi fuera el caso, y le asignas la funcionalidad o el evento:

Código PHP:
Ver original
  1. <?php
  2. while( $row2 = mysqli_fetch_array( $res2 ) )
  3.         {                      
  4. ?>
  5.            
  6.            
  7.             <img id="<?php echo $row2["id"];?>" class="droppables" src="imagenes/frutas/<?php echo $row2["nombre"]; ?>.png" width="50" height="50">        
  8.                            
  9. <?php
  10.        
  11.         }
  12.                    
  13. ?>


Código Javascript:
Ver original
  1. $(".droppables").each(i){
  2.      var id = $(this).prop("id"); // asi tienes el id del elemento en cuestion para si lo necesitas enviar al servidor via ajax, imagino te haga falta
  3.      $(this).droppable({
  4.         ......
  5.      });
  6. };


muy similar a este, pero con los elementos draggables y todos los comportameintos que necesites asignarle a tus div
Buenas X_fran,

En primer lugar, muchísimas gracias por tomarte la molestia de ayudarme...¡Gracias!

No soy nada ducho con jQuery como habrás podido comprobar. No sé muy bien cómo tengo que añadir la parte de jQuery a mi código :(. Me puedes ayudar, por favor.

Gracias por anticipado y perdona las molestias.

Etiquetas: drag, drop
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:15.