Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] ¿Cómo hacer transform:translate con puro javascript?

Estas en el tema de ¿Cómo hacer transform:translate con puro javascript? en el foro de Javascript en Foros del Web. Buen día. La idea es emular en javascript el transform:translate de CSS. Googleando, me encontré con esta página . Aquí se halla un script que ...
  #1 (permalink)  
Antiguo 15/02/2014, 17:43
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Sonrisa ¿Cómo hacer transform:translate con puro javascript?

Buen día.

La idea es emular en javascript el transform:translate de CSS.

Googleando, me encontré con esta página.

Aquí se halla un script que hace casi exactamente lo que pretendo.

La función de dicho script cuenta con un argumento. Pero resulta que mis necesidades requieren que la función no necesite argumentos.

Entonces, modifiqué dicho script anidando 2 funciones, pero no logro que funcione.

Código HTML:
Ver original
  1. <body onload="mover()">
  2.  
  3.   <div id="capa">DIV</div>
  4.  
  5. </body>

Código CSS:
Ver original
  1. #capa {
  2.     position:absolute;
  3.     top:0px;
  4.     left:0px;
  5.     width:100px;
  6.     height:100px;
  7.     background-color:black;
  8.     color:white;
  9. }


Código Javascript:
Ver original
  1. function mover()
  2.     {
  3.         function x(pixelInicial)
  4.         {
  5.             pixelInicial = pixelInicial + 1;
  6.      
  7.             if (pixelInicial != 200)
  8.             {
  9.                 document.getElementById("capa").style.top = pixelInicial + "px";
  10.                 setTimeout( "x(" + pixelInicial + ")", 10 );
  11.             }
  12.         }
  13.        
  14.         return x(0);
  15.     }

¿Qué modificamos para que funcione?



Saludos cordiales.

Última edición por berkeleyPunk; 15/02/2014 a las 18:26
  #2 (permalink)  
Antiguo 15/02/2014, 22:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ¿Cómo hacer transform:translate con puro javascript?

Viendo el ejemplo en la página que dejaste, hice algo distinto:

Código HTML:
Ver original
  1. <div id = "capa"></div>
  2. <button id = "ar">Arriba</button>
  3. <button id = "ab">Abajo</button>
  4. <button id = "iz">Izquierda</button>
  5. <button id = "de">Derecha</button>

Código CSS:
Ver original
  1. #capa{
  2.     position: absolute;
  3.     background: radial-gradient(ellipse, white, yellow);
  4.     width: 50px;
  5.     height: 50px;
  6.     margin-top: 5em;
  7.     border: .1em #aa0 solid;
  8. }

Código Javascript:
Ver original
  1. var div = document.getElementById("capa");
  2.  
  3. window.addEventListener("click", function(e){
  4.     switch(e.target.id){
  5.         case "ar":
  6.             div.style.top -= 2;  
  7.         break;
  8.      
  9.         case "ab":
  10.             div.style.bottom -= 2;
  11.         break;
  12.      
  13.         case "iz":
  14.             div.style.left -= 2;  
  15.         break;
  16.      
  17.         case "de":
  18.             div.style.right -= 2;
  19.         break;
  20.     }
  21. }, false);

De este modo, cada vez que de un clic, tomo el Id del elemento al que se le dio el clic (target = elemento objetivo) y según el Id, muevo el Div hacia una dirección en particular. Te dejo otra opción para hacerlo, utilizando el método animate de jQuery:

Código Javascript:
Ver original
  1. $(window).click(function(e){
  2.     switch (e.target.id){
  3.         case "ar":
  4.             $("#capa").animate({top: "-=5em"}, 300);
  5.         break;
  6.        
  7.         case "ab":
  8.             $("#capa").animate({top: "+=5em"}, 300);
  9.         break;
  10.        
  11.         case "iz":
  12.             $("#capa").animate({left: "-=5em"}, 300);
  13.         break;
  14.        
  15.         case "de":
  16.             $("#capa").animate({left: "+=5em"}, 300);
  17.         break;
  18.     }
  19. });

El resultado: http://jsbin.com/turiq/1

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 16/02/2014, 09:56
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: ¿Cómo hacer transform:translate con puro javascript?

Cita:
Iniciado por Alexis88 Ver Mensaje
Viendo el ejemplo en la página que dejaste, hice algo distinto...
Gracias por responder, Alexis88.

Ayer en la noche, precisamente, después de cansarme de hacer que funcionara el JS, busqué la solución en jQuery, y la cosa funcionó.

Acerca del javascript que pones, no funciona !

A tu código le añadí: + 'px'; a los número "2", que, imagino, representan los números de pixeles que ha de moverse el div. Por si acaso, encerré entre paréntesis cada uno de los casos. Añadí el default y todo lo metí dentro de window.onload= function(){...}

Y nada.

Saludos

PD. Por cierto, tu jQuery funciona bien.
  #4 (permalink)  
Antiguo 16/02/2014, 12:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ¿Cómo hacer transform:translate con puro javascript?

Qué raro, lo probé localmente e iba bien, pero de cualquier forma, el segundo ejemplo con jQuery es el que te te recomiendo usar, al fin y al cabo es JavaScript también, aunque no sea nativo.
__________________
«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
  #5 (permalink)  
Antiguo 16/02/2014, 17:15
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: ¿Cómo hacer transform:translate con puro javascript?

Perfecto, solucioné el problema con el jQuery.

Ordinariamente pondría el código con el que solucioné mi bronca. Pero como el maestro Alexis88 puso ya una alternativa en jQuery, pues no le muevo más.

Saludos y hasta luego.

Etiquetas: Ninguno
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 22:14.