Foros del Web » Programando para Internet » Javascript »

Consulta Js

Estas en el tema de Consulta Js en el foro de Javascript en Foros del Web. Muy buenas señores/as, mi duda es la siguiente, he conseguido crear mis primeras animaciones con CSS3, y el problema que tengo ahora es que al ...
  #1 (permalink)  
Antiguo 22/03/2014, 03:43
 
Fecha de Ingreso: octubre-2006
Mensajes: 137
Antigüedad: 17 años, 6 meses
Puntos: 2
Consulta Js

Muy buenas señores/as,

mi duda es la siguiente, he conseguido crear mis primeras animaciones con CSS3, y el problema que tengo ahora es que al refrescar la home, cargan todas de golpe, es decir, cargan las de más arriba que se ven perfectamente, pero las animaciones del footer de la web también se ejecutan por lo que no se aprecian en ningún momento, mi pregunta es ¿Cómo puedo hacer que se vayan ejecutando conforme voy haciendo scrolldown?

gracias de antemano,
Salu2
  #2 (permalink)  
Antiguo 22/03/2014, 04:50
 
Fecha de Ingreso: febrero-2014
Ubicación: Tarragona
Mensajes: 13
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Consulta Js

Buenas.

podrias hacerlo con js detectando si los elementos a animar se encuentran dentro del viewport:


Código Javascript:
Ver original
  1. var elem = document.querySelector(".elementoQueQuieras");
  2.  
  3. function inViewport () {
  4.  
  5.   //detecta si esta dentro del viewport
  6.  
  7.   if (elem.getBoundingClientRect().top < window.innerHeight){
  8.  
  9.     //disparar la animación
  10.  
  11.   }
  12. }


esta funcion deberia ser ejecutada una vez cargada la pagina y cuando el usuario hace scroll:

Código Javascript:
Ver original
  1. window.onload = inViweport;
  2.  
  3. window.onscroll = inViewport;
  #3 (permalink)  
Antiguo 22/03/2014, 05:14
 
Fecha de Ingreso: octubre-2006
Mensajes: 137
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Consulta Js

Gracias por tu respuesta, pero me temo que vas a tener que explicarme un poco más por favor, no he tocado javascript de lleno nunca:

Imagino que el primer trozo de código lo meto entre <script></script> y lo sitúo en el head, y dónde pone el elemento que quieras meto todos los elementos?, tengo unos 6 efectos distintos. Dónde pones disparas la animación que debo escribir ahí? y por último, dónde hablas de window.onload = inViweport; y onscroll no entiendo dónde sitúo ese trozo de código.

Gracias de antemano
  #4 (permalink)  
Antiguo 22/03/2014, 06:31
 
Fecha de Ingreso: febrero-2014
Ubicación: Tarragona
Mensajes: 13
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Consulta Js

a ver si puedo ayudarte, te dejo el demo en codepen: codepen.io/GreenKhulta/pen/eoCls/

supongamos que los elementos que quieres animar tienen un atributo class con el mismo

valor:

Código HTML:
Ver original
  1. <!-- elementos animables -->
  2.  
  3. <div class="div" id="A"></div>
  4. <div class="div" id="B"></div>
  5. <div class="div" id="C"></div>
  6. <div class="div" id="D"></div>
  7. <div class="div" id="E"></div>

entonces, en el código javascript podriamos generar una lista con todos los elementos

con el atributo class y con el valor "div" o el valor que tu especifiques.

a partir de aqui, una vez hayamos detectado si el elemento se encuentra dentro del viewport,

comprobamos el id del elemento y se dispara la animacion concreta para este elemento.

la comprobacion se hace asi:

Código Javascript:
Ver original
  1. else if(lista[i].id =="E"){
  2.         lista[i].style.animation="animacion5 2s";
  3.         lista[i].style.webkitAnimation="animacion5 2s";
  4.       }

aqui se comprueba si el elemento tiene el id == "E". en ese caso se dispara la animacion5.



durante 2s.

aqui esta el codigo entero, que deberias englobar entre los tag <script> y situarlo al final

de la pagina(footer).



Código Javascript:
Ver original
  1. function inViewport () {
  2.  
  3.   var lista = document.querySelectorAll(".div");
  4.  
  5.   for (var i = 0; i < lista.length; i++ ){
  6.    
  7.     if (lista[i].getBoundingClientRect().top < window.innerHeight){
  8.      
  9.       if(lista[i].id == "A"){
  10.         lista[i].style.animation="animacion 2s";
  11.          lista[i].style.webkitAnimation="animacion 2s";
  12.       }
  13.      
  14.       else if(lista[i].id =="B"){
  15.         lista[i].style.animation="animacion2 2s";
  16.         lista[i].style.webkitAnimation="animacion2 2s";
  17.       }
  18.       else if(lista[i].id =="C"){
  19.         lista[i].style.animation="animacion3 2s"
  20.         lista[i].style.webkitAnimation="animacion3 2s";
  21.       }
  22.       else if(lista[i].id =="D"){
  23.         lista[i].style.animation="animacion4 2s";
  24.         lista[i].style.webkitAnimation="animacion4 2s";
  25.       }
  26.       else if(lista[i].id =="E"){
  27.         lista[i].style.animation="animacion5 2s";
  28.         lista[i].style.webkitAnimation="animacion5 2s";
  29.       }
  30.  
  31.   }
  32.   }
  33. }
  34. window.onload = inViewport;
  35. window.onscroll = inViewport;

espero haberme explicado. probablemente haya mejores formas de hacerlo, a ver si alguien mas se anima.

Última edición por GreenKhulta; 22/03/2014 a las 06:37
  #5 (permalink)  
Antiguo 22/03/2014, 07:22
 
Fecha de Ingreso: octubre-2006
Mensajes: 137
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Consulta Js

Veamos, a ver si podemos ir concretando. Para llamar a un efecto lo que hago es siempre esto; class="animated fadeInLeft", animated es imprescindible, lo que cambia es fadeInLeft (flipInY, fadeInRight) por tanto sabiendo esto podrías ajustarme tu código?, he probado una cosa y otra y no me surge efecto :(

Gracias!
  #6 (permalink)  
Antiguo 22/03/2014, 08:11
 
Fecha de Ingreso: febrero-2014
Ubicación: Tarragona
Mensajes: 13
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Consulta Js

a ver si ahora estamos mas cerca: http://codepen.io/GreenKhulta/pen/eoCls
  #7 (permalink)  
Antiguo 22/03/2014, 15:07
 
Fecha de Ingreso: octubre-2006
Mensajes: 137
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Consulta Js

Muchísimas gracias!, me ha valido :)

Etiquetas: js
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 00:15.