En este caso vamos a tratar un componente interesante, que seguro puede aportar mucho dinamismo a los contenidos de nuestra página web. Se trata del "Accordion", o acordeón en español, que permite mostrar diversos contenidos clasificados en secciones, de manera que se mantenga abierta una de esas secciones y se cierre automáticamente solo al abrir otra.
Si conocemos un poco jQueryUI ya habremos podido experimentar lo sencillo que resulta, con el mínimo código, crear componentes de interfaces de usuario potentes y versátiles. El plugin Accordion no es una excepción, sino al contrario, resulta todavía más impresionante ver lo sencillo que es crear una interfaz muy atractiva con prácticamente nada de código.
Lo primero que podemos hacer es ver en este enlace cómo es un accordion y el código que hemos utilizado para generarlo:
$("#accordion").accordion();
<div id="accordion">
<h3><a href="#">Sección 1</a></h3>
<div>Contenido 1...</div>
<h3><a href="#">Sección 2</a></h3>
<div>Contenido 2...</div>
<h3><a href="#">Sección n</a></h3>
<div>Contenido n</div>
</div>
Como ves, es un código HTML de lo más normal. En principio, según señalan en la documentación, deben generarse los titulares de las secciones en encabezamientos H3, pero durante las pruebas hemos visto que el widget por defecto intenta hacer el acordeón incluso con otros encabezados que podamos poner. No obstante, si queremos utilizar otro encabezado para las secciones podemos indicarlo al llamar al plugin en las "options", como veremos más adelante en este artículo.
Luego, el contenido de cada sección se coloca en una capa DIV, que puede tener cualquier texto con etiquetas HTML diversas, imágenes, etc.
$(document).ready(function() {
$( "#accordion" ).accordion();
});
Aquí podemos ver el acordeón generado con las opciones por defecto.
Las opciones se expresan mediante un objeto de "options" que se pasa al invocar al plugin. Por ejemplo, aquí estaríamos llamando al accordion con tres opciones:
$( "#accordion" ).accordion({
'header': 'h2',
'fillSpace': true,
'active': 1
});