Es muy común el uso de navegación de tipo tabs para contenidos dentro de una misma página y funcionan bastante bien; el usuario ya está acostumbrado a este tipo de elementos y los utiliza sin problemas, además que resulta liviano y relativamente fácil implementarlos.
Pero recientemente un cliente pidió que los tabs se pudieran navegar con el historial del browser, o sea que si vas seleccionado diferentes tabs e incluso saliendo a otras páginas, puedas volver a ellas con el botón ‘Back’ o ‘Volver’ del navegador, y volver a pasar por ellos. Esto me resultó en un problema no menor que me costó solucionar, ya que los tabs suelen reaccionar ante eventos del click del mouse (como por ejemplo para mostrar tal <div> al clickear tal enlace <a> y que a éste se le agregue una class="selected" que indique su estado de seleccionado). Y esto suelo no quedar registrado en el caché del browser para que pueda ser navegado como se pidió. Pero bueno, pude solucionarlo y aquí lo comparto por si lo necesitan; implica 2 pasos diferentes los cuales deben funcionar en conjunto:
Primero, crearemos una simple función en jQuery para que funcionen los tabs. Esta es una de las maneras más simples de crear este tipo de menúes. Para el HTML:
<div class="tabs"><!-- .tabs -->
<ul id="menu_tabs">
<li><a href="#item1">Item 1</a></li>
...
</ul>
<div id="item1" class="caja"><!-- #item1 -->
<h2>Item 1</h2>
<p>Donec gravida posuere arcu.</p>
</div><!-- /#item1 -->
...
</div><!-- /.tabs -->
Le aplicamos la siguiente instrucción en jQuery:
$(function(){
// definimos variables para el contenedor y los<div>'s de los tabs
var tabContainers = $('.tabs > div');
// creamos el evento click para cada uno de los items del menu de tabs
$('div.tabs ul a').each(function() {
$(this).click(function(){
// guardamos el ancla (#item1 por ej.) en una variable del link clickeado
var hash = $(this).attr('href');
// escondemos todos los tabs
tabContainers.hide();
// mostramos el <div> que sea igual al ancla guardado
$(hash).show();
// jugamos agregando y quitando classes del menu
$('div.tabs ul a').removeClass('selected');
$('a[href='+hash+']').addClass('selected');
});
});
// para comenzar, hacemos que el primer elemento sea el clickeado
$('div.tabs ul a:first').click();
});
Bien, con esto tienes tu menú de tabs funcionando de manera básica pero práctica. Ahora como notarás, al ir por los tabs y volver con el botón del navegador éstos no seguirán el mismo recorrido devuelta, aunque en la URL sí se vea que van cambiando. Para que esto ocurra, debemos comparar no el hash del enlace (<a href="#item1"> por ej.), sino comparar con la URL que va cambiando. Además se debe incluir el plugin jQuery BBQ, el que realiza el ingreso de la URL con tabs al caché del browser. Con el mismo HTML, miren la nueva función:
$(function(){
var tabContainers = $('.tabs > div');
// creamos un nuevo evento y lo incluimos al browser
$(window).bind('hashchange', function () {
// nuestra variable no la sacamos del <a> sino de la URL y dejamos el primero seleccionado
var hash = window.location.hash || '#item1';
// el resto es prácticamente lo mismo
tabContainers.hide();
$(hash).show();
$('div.tabs ul a').removeClass('selected');
$('a[href='+hash+']').addClass('selected');
});
// ejecutamos este nuevo evento 'hashchange' mediante un trigger
$(window).trigger('hashchange');
});
En este ejemplo, incluso podemos abrir mediante la URL en el tab que queramos, por ejemplo con el siguiente link abriremos el demo en el tab 3:
Comentarios
demo descargable pliiiiissssss
buenisimo, gracias!
clap!, clap!, clap! como siempre….gracias totales!
Gracias Jorge, esto era justo lo que estaba buscando.
Magestic12: Puedes descargarte el código fuente de las demos.
buy tadalafil generic online – tadalafil price tadalafil canadian pharmacy
tadalafil buy – tadalafil reviews purchasing tadalafil online