Morton 2 de diciembre de 2010 a las 09.09
   Imprimir artículo
elWebmaster.com

jQuery: Crea un seleccionador de ventana activa al estilo Opera Mobile


jquerywideSiempre es divertido jugar con jQuery, especialmente cuando se trata de recrear algo que disfrutamos de usar. Tal es el caso del seleccionador de ventana activa con el que cuenta el navegador Opera Mobile. Aquí veremos cómo lograr este interesante efecto en nuestro sitio, en cualquier navegador.

Fuente original del artículo: Janko at Warp Speed
Traducción realizada por
elWebmaster.com

En el efecto al que nos referimos, las ventanas abiertas están posicionadas una debajo de la otra, y sólo una porción de las mismas es visible. Sólo la que está por delante de la pila es la que resulta totalmente visible. El hacer clic sobre cualquiera de esas ventanas ocasiona, mediante un agradable efecto, que la ventana cliqueada se posicione en la parte superior de la pila y la ventana que ha dejado de ser activa se sitúe ahora al final de la misma.

Haz clic en este enlace para ver una demostración del efecto>>

En el caso de nuestras “ventanas”, no son más que una lista desordenada de elementos li, cuyo contenido es propio.

  1. <ul id="container">
  2.     <li class="current"></li>
  3.     <li></li>
  4.     <li></li>
  5.     <li></li>
  6. </ul>

Lo siguiente, con jQuery, son las variables de cúanto se esconderá cada ventana, y cúanto se deslizará a la izquierda o a la derecha. Luego, le asignamos una id a todas, que luego utilizaremos para posicionarlas.

  1. var itemWidth = $("#container li").width();
  2. var itemPosition = itemWidth * 50 / 100;
  3. var itemMove = itemWidth * 60 / 100;        
  4.  
  5. $("#container li").each(function(i) {
  6.     $(this).attr("id", i).css("z-index", 100 - i).css("left", itemPosition * i);
  7. });

Y ahora, la parte principal. Cuando un usuario hace clic sobre una ventana, muchas cosas pasan. Priero, se determina la posición de la ventana que ha sido cliqueada y de la ventana que fue elegida previamente. Si la ventana cliqueada está a la izquierda de la ventana elegida, todas las ventanas antes de la cliqueada se deslizarán a la izquierda. Si la ventana cliqueada está a la derecha de la ventana elegida, todas las ventanas después de la cliqueada se deslizarán a la derecha.

  1. $("#container li").click(function(e) {
  2.     // Get id's of the current window and the one that user clicked on
  3.     var currentID = parseInt($(".current").attr("id"));
  4.     var clickedID = parseInt($(this).attr("id"));
  5.  
  6.     if (currentID != clickedID) {
  7.         if (clickedID > currentID) {
  8.             // slide windows to the left
  9.         }
  10.         else {
  11.             // slide windows to the right
  12.         }
  13.     }
  14. });

Para deslizar las ventanas a la derecha, tomamos el id de la ventana cliqueada (sumándole 1 para prevenir que se deslice) y la colocamos en un bucle a través de todas las ventanas, hasta el final. En ese momento deslizamos todas las ventanas hacia la derecha, colocándolas por debajo de la ventana cliqueada (utilizando z-index) y finalmente las deslizamos de vuelta hacia la izquierda.

  1. var i = 1;
  2. var total = $("#container li").length;
  3. for (j = clickedID + 1; j <= total; j = j + 1) {
  4.     $("#" + j).animate({ "left": "+=" + itemMove * i + "px" }, 500);
  5.     $("#" + j).animate({ "left": "-=" + itemMove * i + "px" }, 300);
  6.     $("#" + j).css("z-index", currentZ - i);
  7.     i = i + 1;
  8. }
  9. [/javascript]
  10.  
  11. Para el otro lado, es similar aunque más costoso.
  12.  
  13. [javascript]
  14. var i = 1;
  15. var total = clickedID - currentID + 1;
  16. for (j = clickedID - 1; j >= 0; j = j - 1) {
  17.     $("#" + j).animate({ "left": "-=" + itemMove * (i) + "px" }, 500);
  18.     $("#" + j).animate({ "left": "+=" + itemMove * (i) + "px" }, 300);
  19.     i = i + 1;
  20. }
  21. var i = 1;
  22. setTimeout(function() {
  23.     for (j = clickedID - 1; j >= 0; j = j - 1) {
  24.         $("#" + j).css("z-index", total - i);
  25.         i = i + 1;
  26.     }
  27. }, 500);

Pero antes de deslizar ventanas, debemos remover la clase .current de la vieja ventana elegisa y asignársela a la nueva ventana cliqueada.

  1. var currentZ = 99;
  2. var current = $(this);
  3. setTimeout(function() { $(".current").removeClass("current"); current.css("z-index", currentZ).addClass("current"); }, 500);
  4. [/javascipt]
  5.  
  6. Finalmente, agregamos unas líneas para que el deslizamiento no ocurra cuando se cliquea un enlace que contiene esa ventana:
  7.  
  8. [javascript]
  9. if (currentID != clickedID) {
  10.     e.preventDefault();

Haz clic en este enlace para ver una demostración del efecto>>

Esperamos que te sea de mucha utilidad.

Fuente original del artículo: Janko at Warp Speed
Traducción realizada por
elWebmaster.com


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (2)

  1. Marcelo dice:

    Increible efecto, llegará el dia en el que estas librerias suplanten a Flash????

  2. Jorge dice:

    Ojala y no, me agrada mas JS que flash, pero jQuery no me agrada en absoluto

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder