Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Arrastrar divs

Estas en el tema de Arrastrar divs en el foro de Javascript en Foros del Web. Hola, tengo el siguiente código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original <!DOCTYPE html> <html>     <head>         <title></title>     ...
  #1 (permalink)  
Antiguo 20/04/2014, 12:39
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 13 años, 6 meses
Puntos: 3
Arrastrar divs

Hola, tengo el siguiente código:
Código Javascript:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <title></title>
  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  6.         <style>
  7.             .estiloCuadro {
  8.                width: 10em;
  9.                border: solid red;
  10.                position: absolute;
  11.                top: 100px;
  12.                left: 30px;
  13.                cursor: pointer;
  14.                /*Deshabilitar selección de texto*/
  15.                -moz-user-select: none;     /* Mozilla */
  16.                -khtml-user-select: none;   /* Chrome */    
  17.                -o-user-select: none;       /* Opera */
  18.             }
  19.         </style>
  20.         <script type="text/javascript">
  21.             var xInic, yInic;
  22.             var estaPulsado = false;
  23.            
  24.             function ratonPulsado(evt) {
  25.                 //Obtener la posición de inicio
  26.                 xInic = evt.clientX;
  27.                 yInic = evt.clientY;    
  28.                 estaPulsado = true;
  29.                 //Para Internet Explorer: Contenido no seleccionable
  30.                 document.getElementById("cuadro_barra").unselectable = true;
  31.             }
  32.            
  33.             function ratonMovido(evt) {
  34.                 if(estaPulsado) {
  35.                     //Calcular la diferencia de posición
  36.                     var xActual = evt.clientX;
  37.                     var yActual = evt.clientY;    
  38.                     var xInc = xActual-xInic;
  39.                     var yInc = yActual-yInic;
  40.                     xInic = xActual;
  41.                     yInic = yActual;
  42.                    
  43.                     //Establecer la nueva posición
  44.                     var elemento = document.getElementById("cuadro"); //lo que se va a mover
  45.                     var position = getPosicion(elemento);
  46.                     elemento.style.top = (position[0] + yInc) + "px";
  47.                     elemento.style.left = (position[1] + xInc) + "px";
  48.                 }
  49.             }
  50.            
  51.             function ratonSoltado(evt) {
  52.                 estaPulsado = false;
  53.             }
  54.            
  55.             /*
  56.              * Función para obtener la posición en la que se encuentra el
  57.              * elemento indicado como parámetro.
  58.              * Retorna un array con las coordenadas x e y de la posición
  59.              */
  60.             function getPosicion(elemento) {
  61.                 var posicion = new Array(2);
  62.                 if(document.defaultView && document.defaultView.getComputedStyle) {
  63.                     posicion[0] = parseInt(document.defaultView.getComputedStyle(elemento, null).getPropertyValue("top"))
  64.                     posicion[1] = parseInt(document.defaultView.getComputedStyle(elemento, null).getPropertyValue("left"));
  65.                 } else {
  66.                     //Para Internet Explorer
  67.                     posicion[0] = parseInt(elemento.currentStyle.top);            
  68.                     posicion[1] = parseInt(elemento.currentStyle.left);              
  69.                 }      
  70.                 return posicion;
  71.             }
  72.         </script>
  73.     </head>
  74.     <body>
  75.         <div id="cuadro" class="estiloCuadro"><div id="cuadro_barra">barra</div>Arrastra con el ratón<br>para mover este cuadro</div><!-- Siendo una barra tipo Windows desde donde se arrastra todo el div (no he copiado su css) -->
  76.  
  77.         <script type="text/javascript">
  78.             var el = document.getElementById("cuadro_barra"); //desde donde se mueve
  79.             if (el.addEventListener){
  80.                 el.addEventListener("mousedown", ratonPulsado, false);
  81.                 el.addEventListener("mouseup", ratonSoltado, false);
  82.                 document.addEventListener("mousemove", ratonMovido, false);
  83.             } else { //Para IE
  84.                 el.attachEvent('onmousedown', ratonPulsado);
  85.                 el.attachEvent('onmouseup', ratonSoltado);
  86.                 document.attachEvent('onmousemove', ratonMovido);
  87.             }            
  88.         </script>  
  89.     </body>
  90. </html>
Sirve para arrastrar el div cuadro. El problema es que solo vale para ese. Yo quisiera que se moviesen, por ejemplo, el div cuadro2, el cuadro3,... cuadron que son iguales que el primero pero cambian su id y la de la barra. He probado a enviar por parametros a la funcion ratonMovido el div a mover cambiando:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.             var el = document.getElementById("cuadro_barra"); //desde donde se mueve
  3.             var div=el.id.split("_");
  4.             if (el.addEventListener){
  5.                 el.addEventListener("mousedown", ratonPulsado, false);
  6.                 el.addEventListener("mouseup", ratonSoltado, false);
  7.                 document.addEventListener("mousemove", function(){ratonMovido(div[0]):}, false);
  8.             } else { //Para IE
  9.                 el.attachEvent('onmousedown', ratonPulsado);
  10.                 el.attachEvent('onmouseup', ratonSoltado);
  11.                 document.attachEvent('onmousemove', ratonMovido);
  12.             }            
  13.         </script>  
  14.  
  15. function ratonMovido(div,evt) {
  16.                 if(estaPulsado) {
  17.                     //Calcular la diferencia de posición
  18.                     var xActual = evt.clientX;
  19.                     var yActual = evt.clientY;    
  20.                     var xInc = xActual-xInic;
  21.                     var yInc = yActual-yInic;
  22.                     xInic = xActual;
  23.                     yInic = yActual;
  24.                    
  25.                     //Establecer la nueva posición
  26.                     var elemento = document.getElementById(div); //lo que se va a mover
  27.                     var position = getPosicion(elemento);
  28.                     elemento.style.top = (position[0] + yInc) + "px";
  29.                     elemento.style.left = (position[1] + xInc) + "px";
  30.                 }
  31.             }
Pero no se porque en la funcion ratonMovido, confunde el parametro div con el evt. Creo que solucionando eso lo tendría pero no tengo ni idea de como hacerlo.
Gracias
  #2 (permalink)  
Antiguo 20/04/2014, 19:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Arrastrar divs

Antes de que sigas con esto, te propongo hacer draggables a los elementos <div> con el evento drag y su familia, implementados en HTML5.



Para lo que buscas, solamente tendrías que jugar con los eventos disponibles en el enlace que adjunté.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 21/04/2014, 08:34
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Arrastrar divs

Hola, gracias por eso. Al final he decidido hacerlo con otro código pero sin usar lo de drag porque no me aclaraba. Gracias de todas formas ;)

Etiquetas: arrastrar, divs, funcion, html, select
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 20:44.