Foros del Web » Programando para Internet » Jquery »

Objetos arrastrables

Estas en el tema de Objetos arrastrables en el foro de Jquery en Foros del Web. Hola estoy usando jquery ui para hacer que unos divs se pueden arrastrar pero necesito ayuda con como hacer que los divs al tocar se ...
  #1 (permalink)  
Antiguo 08/01/2013, 15:14
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Objetos arrastrables

Hola estoy usando jquery ui para hacer que unos divs se pueden arrastrar pero necesito ayuda con como hacer que los divs al tocar se unos a otros se paren y no entren dentro de sus contenidos. Es decir que una div no entre en otra al moverse.

Como puedo conseguir esto??

Última edición por patilanz; 08/01/2013 a las 15:25
  #2 (permalink)  
Antiguo 08/01/2013, 17:48
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Objetos arrastrables

A cada elemento tienes que almacenar su última posición X e Y válida de donde estaba. Cuando se mueva, en su evento drag compruebas si ese div colisiona con algun otro div con el sencillo método de detección de colisión de rectángulos. Si choca con alguno, le asignas el valor de X e Y que tenias almacenado de la última posición válida.
  #3 (permalink)  
Antiguo 11/01/2013, 10:46
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Objetos arrastrables

Cita:
Iniciado por marlanga Ver Mensaje
A cada elemento tienes que almacenar su última posición X e Y válida de donde estaba. Cuando se mueva, en su evento drag compruebas si ese div colisiona con algun otro div con el sencillo método de detección de colisión de rectángulos. Si choca con alguno, le asignas el valor de X e Y que tenias almacenado de la última posición válida.
Hola gracias por tu respuesta pero no se de que ejes x e y me hablas ?? Seria el left y el top o no??

Saludos

Última edición por patilanz; 11/01/2013 a las 13:31
  #4 (permalink)  
Antiguo 11/01/2013, 15:05
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Objetos arrastrables

Tengo varios objetos que quiero que cuando un objeto que es movido choque con otro se pare y no entre en el. Pero no consigo hacer nada... Tengo el siguiente codigo:

En el window.load tengo esto:

Código Javascript:
Ver original
  1. $( "#p1" ).draggable({containment: 'parent', cursor: "move", cursorAt: { bottom: 0}, drag: function(event, ui){
  2.         almacenar(1);  
  3.     }});
  4.     $( "#p1" ).resizable({animate: true, minHeight: 200, minWidth: 200, maxHeight: 300, maxWidth: 400, helper: 'rezisable_helper', containment: "parent"});
  5.     $( "#p2" ).draggable({containment: 'parent', cursor: "move", cursorAt: { bottom: 0}, drag: function(event, ui){
  6.         almacenar(1);  
  7.     }});
  8.     $( "#p2" ).resizable({animate: true, minHeight: 200, minWidth: 200, maxHeight: 300, maxWidth: 400, helper: 'rezisable_helper', containment: "parent"});
  9.     for(var s=1;s!=7;s++){
  10.         var o=document.getElementById('p'+s);
  11.         p[s]={x:o.style.left.substring(0,o.style.left.indexOf('px')),
  12.           y:o.style.top.substring(0,o.style.top.indexOf('px')),
  13.           width:o.style.width.substring(0,o.style.width.indexOf('px')),
  14.           height:o.style.height.substring(0,o.style.height.indexOf('px'))};
  15.     }


Y luego en una función esto:

Código Javascript:
Ver original
  1. function almacenar(s){
  2.     var o=document.getElementById('p'+s);
  3.  
  4.     for(var i=1;i!=7;i++){
  5.         if(i!=s){
  6.             var c=true;
  7.             var ob=document.getElementById('p'+i);
  8.             if(p[s].x+p[s].width<ob.style.left.substring(0,ob.style.left.indexOf('px'))){
  9.                 c=false;
  10.             }
  11.             if(p[s].y+p[s].height<ob.style.top.substring(0,ob.style.top.indexOf('px'))){
  12.                 c=false;   
  13.             }
  14.             if(p[s].x>ob.style.left.substring(0,ob.style.left.indexOf('px')) + ob.style.width.substring(0,indexOf('px'))){
  15.                 c=false;
  16.             }
  17.             if(p[s].y>ob.style.top.substring(0,ob.style.top.indexOf('px')) + ob.style.height.substring(0,indexOf('px'))){
  18.                 c=false;
  19.             }
  20.         }
  21.         if(c==true){
  22.             document.getElementById('p'+s).style.left=p[s].x+'px';
  23.             document.getElementById('p'+s).style.top=p[s].y+'px';
  24.             document.getElementById('p'+s).style.width=p[s].width+'px';
  25.             document.getElementById('p'+s).style.height=p[s].height+'px';
  26.             alert(document.getElementById('s'+s).style.left);
  27.         }
  28.     }
  29. }

Pero no sucede nada y entran uno en otro :(

Alguien me puede ayudar??
  #5 (permalink)  
Antiguo 11/01/2013, 17:48
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Objetos arrastrables

Pon un ejemplo funcionando (hasta donde puedas) en http://jsfiddle.net/
Y sí, con X e Y me refería a left y top respectivamente. Pero cuidado con los offset de la página.

Etiquetas: javascript, objetos
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 12:07.