SimpleTabs

0 - , , - 05/01/2009 18:58:32

SimpleTabs es un script no intrusivo para realizar "tabs" (pestañas). Quizá la gran ventaja es que no depende de ninguna biblioteca como jQuery, Mootools, etc. Lo que significa, por un lado, que nos podremos evitar posibles conflictos entre librerías o incompatibilidades con otros scripts, y por otro qe el tamaño final del script será mucho menor. También cabe destacar que es capaz de recordar el último tab al que se ha accedido si se recarga la página.

Para implementarlo hay que incluir los ficheros simpletabs.js y simpletab.css files y replicar una estructura XHTML similar a la siguiente:

<div class="simpleTabs">
<ul class="simpleTabsNavigation">
<li><a href="#">Tab 1</a></li>
<li><a href="#">Tab 2</a></li>
<li><a href="#">Tab 3</a></li>
</ul>
<div class="simpleTabsContent">Contenido llamado cuando a "Tab 1" se le hace click.</div>
<div class="simpleTabsContent">Contenido llamado cuando a "Tab 2" se le hace click.</div>
<div class="simpleTabsContent">Contenido llamado cuando a "Tab 3" se le hace click.</div>
</div>

Ver ejemplo en funcionamiento » »

SimpleTabs by Komrade » »

Crear una navegación por pestañas con AJAX y CSS. Segunda Parte

0 - , , - 07/11/2006 09:19:55

Continuación del tutorial de ayer. En esta parte vamos a ver la parte AJAX del mismo. Lo primero es crear una nueva istancia del objeto XMLHttpRequest:

var peticion = false; 
if (window.XMLHttpRequest) {
peticion = new XMLHttpRequest();
} else if (window.ActiveXObject) {
peticion = new ActiveXObject("Microsoft.XMLHTTP");
}

Luego necesitamos una función que cargue los datos en el div que le indiquemos.

function ObtenerDatos(datos,divID) { 
if(peticion) {
     var obj = document.getElementById(divID); 
     peticion.open("GET", datos); 
     peticion.onreadystatechange = function()  { 
          if (peticion.readyState == 4) { 
               obj.innerHTML = peticion.responseText; 
          } 
     } 
peticion.send(null); 
}
}

A la función la llamamos desde cada una de las pestañas para que cargue el contenido correspondiente. Le pasamos dos parámetros, los datos que queremos abrir y dónde los queremos abrir. Esta es una función genérica que nos puede servir en muchos casos para cargar datos con AJAX.Así la lista, variaría respecto a como nos quedamos en el tutorial anterior y quedaría del siguiente modo:

<li class="activo" id="bt1"><a href="javascript:ObtenerDatos('1.html','ContTabul');CambiarEstilo('bt1');">Apartado 1</a></li>
<li class="inactivo" id="bt2"><a href="javascript:ObtenerDatos('2.html','ContTabul');CambiarEstilo('bt2');">Apartado 2</a></li>
<li class="inactivo" id="bt3"><a href="javascript:ObtenerDatos('3.html','ContTabul');CambiarEstilo('bt3');">Apartado 3</a></li>
<li class="inactivo" id="bt4"><a href="javascript:ObtenerDatos('4.html','ContTabul');CambiarEstilo('bt4');">Apartado 4</a></li>

En este punto, la navegación ya funciona. Pero si os fijais en el código precedente, vereis que le he asignado un id a cada botón (bt1,b2,bt3,bt4) y a al primero una clase "activo" y al resto "inactivo"

#tabnav .activo {
      border-bottom: 1px solid #fff;
      color: #000000;
      background-color: #FFFFFF;
}
#tabnav .inactivo {}

Esto lo hago para, de un modo similar a un ejemplo anterior, cambiar la clase de los elementos y así siempre marcar el apartado activo. En este caso me apoyo también en una función creada por Jonathan Snook para obtener el elementos que tenga la clase "activo" y pasarlo a "inactivo".

function CambiarEstilo(id) {
var elementosMenu = getElementsByClassName(document, "li", "activo");
for (k = 0; k< elementosMenu.length; k++) {
elementosMenu[k].className = "inactivo";
}
var identity=document.getElementById(id);
identity.className="activo";
}
/*
function getElementsByClassName
Written by Jonathan Snook, http://www.snook.ca/jonathan
Add-ons by Robert Nyman, http://www.robertnyman.com
*/
function getElementsByClassName(oElm, strTagName, strClassName){
var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
strClassName = strClassName.replace(/\-/g, "\\-");
var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
var oElement;
for(var i=0; i oElement = arrElements[i];
if(oRegExp.test(oElement.className)){
arrReturnElements.push(oElement);
}
}
return (arrReturnElements)
}

Descargar ejemplo completo »»

Crear una navegación por pestañas con AJAX y CSS. Primera Parte

0 - , - 06/11/2006 00:00:00

En esta primera parte se va a crear la arquitectura en CSS y HTML que permitirá cargar los distintos contenidos en una navegación por pestañas o tabs. Para crear una barra de navegación, se puede usar una lista a la que se quitan las viñetas y se cuyos elementos se disponen de modo horizontal gracias a "display:inline". Para dar el aspecto de botones se les asigna un borde y un fondo que cambian cuando se pasa el raton sobre ellos (:hover). También he dispuesto de un contenedor "ContTabul" que será donde se irán cargando los distintos contenidos.Creo que el CSS es bastante claro y, en el caso de que no lo sea, uno siempre puede recurrir a múltiples tutoriales en internet que se enseñan como crear estas pestañas con CSS.

Quizá la unica peculiaridad es la creación de dos clases ("inactivo" y "activo"), que utilizaré y permutaré entre ellas con Ajax para mostrar en cada momento cuál es la pestaña activa. Pero eso lo veremos en la segunda parte del tutorial.

El código para crear una simple navegación por pestañas sería:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AJAX TABS
<style type="text/css">
body {
      font-family: Verdana, Arial, Helvetica, sans-serif;
      font-size: 10px;
      background-color: #FFFFFF;
      margin-left: 100px;
      margin-right: 100px;
}
#ContTabul {
      border-left: 1px solid #CCC;
      border-right: 1px solid #CCC;
      border-bottom: 1px solid #CCC;
      padding: 10px 5px 6px 5px;
}
ul#tabnav {
      list-style-type: none;
      margin: 0;
      padding-left: 40px;
      padding-bottom: 24px;
      border-bottom: 1px solid #CCC;
      font: 11px verdana, arial, sans-serif;
}
ul#tabnav li {
      float: left;
      height: 21px;
      background-color: #E4E4E4;
      color: #666;
      margin: 2px 10px 0 2px;
      border: 1px solid #CCC;
}
ul#tabnav a:link, ul#tabnav a:visited {
      display: block;
      color: #666;
      text-decoration: none;
      padding: 4px;
}
ul#tabnav a:hover {
      background-color: #CCC;
      color: #666;
}
#tabnav .activo {
      border-bottom: 1px solid #fff;
      color: #000000;
      background-color: #FFFFFF;
}
#tabnav .inactivo {}
</style>
</head>
<body>
<ul id="tabnav">
<li class="activo">Apartado 1</a></li>
<li class="inactivo">Apartado 2</a></li>
<li class="inactivo">Apartado 3</a></li>
<li class="inactivo">Apartado 4</a></li>
</ul>
<div id="ContTabul">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus mollis. Etiam aliquet. Ut ultrices justo ut arcu. Proin a purus. Fusce pharetra ultrices nibh. Nam erat lectus, dapibus id, congue vel, cursus a, tellus. Sed turpis ante, condimentum at, accumsan eget, pulvinar vitae, nibh. </p>
</div>
</body>
</html>
Ver ejemplo en funcionamiento » »

1