Parallax en uso real

Luego del anterior artículo develando cómo se realiza el efecto Parallax con CSS, surgieron dudas de su real aplicación en proyectos web. Así como se presentó no tiene mucho sentido, y como mencioné, es difícil verlo aplicado sin que se note el efecto que produce (ya que el usuario no suele modificar el tamaño de la ventana de su browser). Así que para paliar esa frustración que surgió en los comentarios, me propuse inventar un método para verlo funcionando de acuerdo a la interacción del usuario con el sitio. Primero intenté con el movimiento del mouse sobre la superficie de la ventana (con lo que hice para el sitio de 2monos), pero no funcionó por problemas de posicionamiento relativo de los elementos. Luego, pensé en movimiento horizontal mediante anclas; algo que ya había utilizado en otras ocasiones anteriores. Felizmente logré integrarlo a través del grandioso Mootools.

Ver ejemplo

En esta ocasión utilicé bastantes más capas que en el ejemplo original (6 en total… un poco exagerado ya que los PNG‘s pesan bastante), pero el HTML fue construído de igual manera:

<div id="nube">
   <div id="montanas">
      <div id="ciudad">
         <div id="personas">
            <div id="persona1">
               <img src="imgs/persona1.png" width="280" height="280">
               <p>Nulla facilisi. In vel sem…</p>
            </div>
            <div id="persona2">
               <img src="imgs/persona2.png" width="280" height="280">
               <p>Aliquam et nisl vel ligula…</p>
            </div>
            <div id="persona3">
               <img src="imgs/persona3.png" width="280" height="280">
               <p>Nunc auctor bibendum eros….</p>
            </div>
         </div>
         <div id="enredadera">
            <div id="hojas">
            </div>
         </div>
      </div>
   </div>
</div>

Y el CSS:

#nube, #montanas, #ciudad, #enredadera, #hojas, #personas {
   position: absolute;
   height: 100%;
   width: 200%;
   left: -150px;
}

Un detalle importante fue ampliar bastante el ancho de todas las cajas para que puedan soportar un desplazamiento horizontal contínuo (cuidando siempre que sea en porcentaje; así se conserva el efecto Parallax). Cada imagen es aplicada como background y posicionada horizontalmente en porcentaje y verticalmente de acuerdo a su ubicación (top ó bottom).

#nube {
   background: url(../imgs/nube.png) 20% top repeat-x;
}
#montanas {
   background: url(../imgs/montanas.png) 10% bottom repeat-x;
}
#ciudad {
   background: url(../imgs/ciudad.png) 30% bottom repeat-x;
}
#enredadera {
   background: url(../imgs/enredadera.png) 40% top repeat-x;
}
#hojas {
   background: url(../imgs/hojas.png) 50% bottom repeat-x;
}

Si modifican el ancho de la ventana verán que se conserva el efecto Parallax, salvo la capa de personas la que pretendo que sea contenido (dado el caso que se requiera así).

Ahora, la magia se aplica a través de Mootools. El efecto de desplazamiento está dentro del .js que incluí al bajar el archivo y se llama FX.Style. Con él haremos que mediante un evento de click en cada botón, cada <div> se desplace en diferentes medidas de su margin-left. O sea, la primera capa #nubes se moverá -100px a la izquierda, luego #montanas lo harán -200px y así sucesivamente, logrando un efecto de profundidad en cada capa ya que se moverán en diferentes medidas:

$(‘btn_uno’).addEvent(‘click’, function(){
   nube.start({
      ’margin-left’: 0
   });
   montanas.start({
      ’margin-left’: 0
   });
   ciudad.start({
      ’margin-left’: 0
   });
   enredadera.start({
      ’margin-left’: 0
   });
   hojas.start({
      ’margin-left’: 0
   });
   personas.start({
      ’margin-left’: 0
   });
});
$(‘btn_dos’).addEvent(‘click’, function(){
   nube.start({
      ’margin-left’: -100
   });
   montanas.start({
      ’margin-left’: -200
   });
   ciudad.start({
      ’margin-left’: -300
   });
   enredadera.start({
      ’margin-left’: -400
   });
   hojas.start({
      ’margin-left’: -1000
   });
   personas.start({
      ’margin-left’: -500
   });
});
$(‘btn_tres’).addEvent(‘click’, function(){
   nube.start({
      ’margin-left’: -500
   });
   montanas.start({
      ’margin-left’: -600
   });
   ciudad.start({
      ’margin-left’: -700
   });
   enredadera.start({
      ’margin-left’: -800
   });
   hojas.start({
      ’margin-left’: -1500
   });
   personas.start({
      ’margin-left’: -900
   });
});

SafariFirefoxOpera

Pueden ver el código completo de cada elemento:

Ver ejemplo final

PD: El movimiento en Safari 3 anda perfecto, muy suave; ya en Firefox 2 y 3 se pega algunos saltos, y en Opera 9.2 anda mas cortado aún… Quizás sea mi computador, espero sus impresiones sobre esto.

Sobre el Autor: Jorge Epuñan

Soy quien escribe en este sitio: diseñador gráfico de profesión, desarrollador web por preferencia y amante de la interacción humano-computador. Cuando no pienso en web, salgo a trotar por mis barrios en Santiago, Chile o me junto con amigos a un bar a conversar sobre nuevas tendencias y tecnologías. Twitter profesional y personal, además del Contacto.

  1. yamir

    perfecto!!! muy buena ilusión.

  2. yamir

    lástima casi nada funcione con IE.

  3. Pablo Martinez

    Muy buen resultado y muy currado.
    Lo único que veo un poco irreal es la velocidad de las montañas y los edificios. Tendrían que moverse mucho mas lentos.

  4. fearlex

    Lastima que no se vea tan bien, como lo hace en Safari, en Firefox, pero bueno, muy bueno el efecto :D

  5. fearlex

    Quisiera agregar que gracias por tomarte el tiempo buscar alternativas, las ideas brillantes, siempre salen de estos pequenos intentos de lograr algo :D

    Saludos y gracias :D

  6. marioloyola

    Agradesco tu esfuerzo, te cuento MI experiencia

    en firefox 2.0.0.14 lo veo entrecortado, osea la animacion no es totalmente fluida

    en explorer 7 los textos de los globos de cada personaje NO salen y la animacion es como a saltos

    suerte y gracias por todos tus consejos

  7. Nexon

    Esta simplemente es mi biblia del CSS, gracias compadre por todas las ayudas inconcientes que me has dado,
    Saludos.

  8. Nayland Smith

    En Opera 9.5 va perfecto

  9. blosiete

    Muy bueno, desde q encontre esta web no paro de mirar cosas en ella.

    Una pregunta? se podria hacer q las personas fueran botones y hacer un link desde estos?? o q se pudiera interactuar con lo q va dentro de lo q se mueve??

  10. Jorge Epuñan

    blosiete: claro, puedes hacer que sea clickeable lo q quieras; manejalos mediante ID en Mootools.

  11. blosiete

    ok perfecto.

    Gracias

  12. Gonzalo Garcia

    Hola Jorge!

    Un gran efecto! Yo lo apliqué casi enteramente para hacer mi página web.

    Por otro lado decirte que con la última versión de jQuery, Fx.Style ha quedado obsoleto y ahora hay que utilizar Fx. Morph para generar los movimientos.
    Es un cambio realmente sencillo.

    Un saludo y muchas gracias!

  13. Jorge Epuñan

    Hey Gonzalo, me gusto mucho tu sitio. Es verdad Mootools ha cambiado mucho ultimamente lo he dejado ya q me dedique casi por completo a jQuery, pero los efectos de Mootools son muy superiores, principalmente su fisica asi q sigo jugando con el.

  14. lucas

    He intentado desarrollar una web gracias a este grandioso efecto, sin embargo no logro que funcione en Internet explorer, y creeme es todo un problema.

    Ya se, yo tambien los odio, por lo sucio que juegan pero bue…

    si sabes como hacerlo funcional me darias una gran mano…

    gracias desde ya!

    abrazoo!

  1. [...] (29/mayo/2008) : Mira el siguiente enlace para complementar este tema Parallax en uso real. ...
    Efecto Parallax en el fondo de una web » Cosas sencillas
  2. [...] que es el efecto Parallax? En la cinematografía se ve mucho este interesante efecto y en éste y éste ...
    Reproduciendo Parallax — Tablosign
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221| buy cialis canada paypal empfehlung online apotheke viagra generic viagra using master card viagra store in las vegas how to get doctor to prescribe cialis viagra no prescription overnight delivery what kind of doctor to see propecia rx proscar uk where to buy v herbal viagra alternative off the counter in ireland cialis name brndAccutane Online Doxycycline online Buy Cheap Lexapro Online No Prescription Prednisone Online Buy Accutane No Prescription