Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] ¿Como hago esta animacion?

Estas en el tema de ¿Como hago esta animacion? en el foro de Javascript en Foros del Web. Soy bastante novato en el desarrollo de una web y tengo esta duda de la cual no se como resolverla.. Tengo una cabezera la cual ...
  #1 (permalink)  
Antiguo 04/11/2014, 18:53
 
Fecha de Ingreso: octubre-2011
Mensajes: 45
Antigüedad: 12 años, 7 meses
Puntos: 0
¿Como hago esta animacion?

Soy bastante novato en el desarrollo de una web y tengo esta duda de la cual no se como resolverla..

Tengo una cabezera la cual quiero que al pulsarla se despliege moviendose de derecha a izquierda y muestre otros elementos..

He echo esta imagen, al principio y al final de la animacion.

Hay un elemento en la esquina superior derecha y al pulsar se despliega hasta ocupar el ancho de la pantalla y tambien se ve un input text

  #2 (permalink)  
Antiguo 04/11/2014, 20:07
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: ¿Como hago esta animacion?

Esta sería una forma de hacerlo con código JS nativo, con la salvedad de que funciona en la mayoría de navegadores, pero, en IE, solo a partir de la versión 9.

Código HTML:
Ver original
  1. <div>
  2.     <input type = "text" />
  3. </div>

Código CSS:
Ver original
  1. div{
  2.     background: red;
  3.     width: 2.5%;
  4.     float: right;
  5.     cursor: pointer;
  6. }
  7.  
  8. div input{
  9.     opacity: 0;
  10.     width: 0;
  11. }

Código Javascript:
Ver original
  1. var div = document.querySelector("div"),
  2.     input = div.querySelector("input"),
  3.     body = document.body,
  4.     bodyWidth, divWidth;
  5.  
  6. div.addEventListener("click", function(){
  7.     bodyWidth = parseFloat(body.clientWidth);
  8.     divWidth = parseFloat(getComputedStyle(div).width);
  9.     if (divWidth == bodyWidth){
  10.         this.style.width = (bodyWidth * 0.025) + "px";
  11.         input.style.opacity = 0;
  12.         input.style.width = 0;
  13.     }
  14.     else{
  15.         this.style.width = bodyWidth + "px";
  16.         input.style.opacity = 1;
  17.         input.style.width = "auto";
  18.     }
  19. }, false);

Ahora, la explicación. En el documento, tenemos a una división, la cual contiene una caja de texto. En la hoja de estilos, le asigno el 2.5% del ancho del cuerpo del documento (el elemento padre) a la división y la alineo a la derecha, además, le doy 0 de opacidad a la caja de texto para que no se vea al inicio y 0 de ancho. En el código JS, tomo a ambos elementos, así como al cuerpo del documento y declaro dos variables que usaré más adelante.

Cuando demos un clic a la división, se ejecutará una función. En dicha función, tomo el ancho del cuerpo del documento y el de la división pero sin la unidad de medida, que en este caso es 'px', quedando solo la parte numérica. Luego, si el ancho de la división es igual al del cuerpo del documento, le asigno el 2.5% del mismo y desaparezco a la caja de texto, caso contrario, le asigno el ancho del cuerpo del documento a la división y hago visible a la caja de texto, además de asignarle un ancho automático (el cual es calculado por el navegador).

DEMO

Para obtener compatibilidad con navegadores antiguos (y que, por fortuna, cada vez son menos usados), revisa la documentación existente de los métodos y propiedades que utilicé.

También puedes consultar en CanIUse acerca de la compatibilidad con los navegadores más usados de los métodos y propiedades que utilicé, además, te recomiendo utilizar identificadores para trabajar con los elementos, así evitarás conflictos con otros elementos similares.

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

Etiquetas: input
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 16:52.