Contenido

Expandable Sidebar Menu, el acordeón de jQuery

15 Nov

+ 36

Si eres de los que aman jQuery por encima de todas las cosas, pero el acordeón de moo.fx te hace dudar sobre tu amor. Ya puedes estar tranquilo, los chicos de jQuery se han puesto manos a la obra para que nunca más vuelvas a dudar sobre tus sentimientos.

jqueryaccordion.jpg

La verdad es que es bastante simple de montar, asi que para demostrar lo fácil que es han hecho un video explicativo para que nadie se pierda.

Que necesitamos

Necesitamos un fichero HTML que usaremos de base.


<?xml version="1.0" encoding="utf-8"?>
<!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" xml:lang="en-us">
<head>
	<title>DL Demo</title>
	<style>
	body { font-family: Arial; font-size: 16px; }
	dl { width: 300px; }
	dl,dd { margin: 0; }
	dt { background: #F39; font-size: 18px; padding: 5px; margin: 2px; }
	dt a { color: #FFF; }
	dd a { color: #000; }
	ul { list-style: none; padding: 5px; }
	</style>
</head>

<body>
<dl>
	<dt><a href="xinha_editor.html/">jQuery</a></dt>
	<dd>
	<ul>
		<li><a href="xinha_editor.html/src/">Download</a></li>
		<li><a href="xinha_editor.html/docs/">Documentation</a></li>
		<li><a href="xinha_editor.html/blog/">Blog</a></li>

	</ul>
	</dd>
	<dt><a href="xinha_editor.html/discuss/">Community</a></dt>
	<dd>
	<ul>
		<li><a href="xinha_editor.html/discuss/">Mailing List</a></li>
		<li><a href="xinha_editor.html/tutorials/">Tutorials</a></li>

		<li><a href="xinha_editor.html/demos/">Demos</a></li>
		<li><a href="xinha_editor.html/plugins/">Plugins</a></li>
	</ul>
	</dd>
	<dt><a href="xinha_editor.html/dev/">Development</a></dt>
	<dd>
	<ul>

		<li><a href="xinha_editor.html/src/">Source Code</a></li>
		<li><a href="xinha_editor.html/dev/bugs/">Bug Tracking</a></li>
		<li><a href="xinha_editor.html/dev/recent/">Recent Changes</a></li>
	</ul>
	</dd>
</dl>
</body>
</html>

Como podemos ver, se trata de una lista de definiciones, indicando en su <dt></dt> el título de la sección y en su <dd></dd> una lista con lo que incluye esta sección.  

Una vez visto esto, comienza la mágia, 8 líneas de código para conseguir un efecto acordeon muy bonito.


	<script src="jquery.js"></script>
	<script>
	$(document).ready(function(){
		$("dd:not(:first)").hide();
		$("dt a").click(function(){
			$("dd:visible").slideUp("slow");
			$(this).parent().next().slideDown("slow");
			return false;
		});
	});
	</script>

Joder, moo.fx me hacia dudar del amor a jquery, y ahora amaba casi igual a mootools que jquery,vuelvo a estar confuso :’(

A mi no me da ningún salto. Quizas sea que tienes el navegador muy cargado.

Bueno, lo estoy probando con IE7

Hi anieto, de casualidad sabes talvez si este menu tiene algún tipo de licencia?, en el sitio no la encontre, aunque ya deje un mensaje :) thanks.

hola que tal!!… alguien sabe como poder hacer este menu, pero que cuando tenga links entra a los lonks y no al menu desplegable?? saludos!!

A mi en Safari me da saltitos raros también. Parece mas optimizado el de mootools:
http://www.solutoire.com/experiments/mootools/acc_ex3.html

Hola anieto necesito una orientacion de como puedo adaptar este codigo al menu de categorias del sistema oscommerce…tengo muchas categorias principales con bastantes subcategorias y me ocupan un gran espacio de largo…el acordion me sirve para achicar un poco ese gran menu, he usado una contribucion que crea un menu de categorias desplegadas desde este link:

http://www.oscommerce.com/community/contributions,885

(te lo paso para que le des una miradita al codigo en cuestion)

no me puedo dar cuenta de como hacer para q interactue el codigo del acordion con el de las categorias…Cualquier idea q me puedas dar sera enteramente agradecida…Saludos

Hola, es buenisimo este efecto, en IE7 da pequeños saltitos, pero nada importante.
Quisiera saber cómo aplicarlo si los datos del menú son leídos desde bases de datos!
Tengo CATEGORIA y TIPO… CATEGORIA seria el titulo, al hacerle click mostraría todos los TIPOS en el acordeón qe se abre…
Esto se puede? Ya que cuando empieza habla de un HTML como base.
Gracias. Saludos.

Probé y no me funciona en IE7 :(
Sí me funciona perfectamente en FF
Saludos.-

Muy bueno el menú. Tengo una inquietud: siempre aparece desplegada la primera opcion del menú, como hago para que aparezca todo contraido y se despliege solo cuando seleccione una opción.

Muchas gracias

como hago para ponerlo en un sitio?
no puedo :S

si alguien me puede ayudar se los agradesco

Podrian empezar por leer primero las bases de jQuery. Una vez que lo entiendan, se van a dar cuenta que es una pavada hacer este efecto. Saludos.

It is very beautifull, but we do not need a menu that every time we click it forgets the clicked link.

Is it possible to remember the state with cookies or something?

A mi tambien me salen saltitos raros. uso IE7. Puede resultar de una mala version del jQuery?

bueno he intentado poner este menu , lo he intentado haciendo que jale datos de una base de datos de mysql…incrsutado en php..pero en ie me da como saltos a la hora de que uno de los menus se contrae ..pero bueno en fin ..tratare haciendolo en el de mootools..a ver que pasa

Se puede hacer acordiones anidados???

Problemilla,

Me da el error:

$("dd:not(:first)") has no properties
[Break on this error] $("dd:not(:first)").hide();

DE donde puede venir?, El menu lo cargo de Base de datos…

Alguien sabe el porque?

hola, tengo el siguiente codigo y queria q se me iniciase el acordeon totalmente recogido

puse un $('dd').hide(); pero claro afecta a toda la pagina, no solo a este menu #nav

$(function(){
$('#nav').find('> dt a').click(function(){
			var $link = $(this);
			var $dd = $link.parent().next();
			var $alldd = $link.parents('dl').find('dd');
			if($dd.is('dd:hidden')){
				$alldd.stop().removeClass('active').hide();
				$dd.addClass('active').animate({ opacity:'1', height:'show' }, 150);
			} else if($dd.is('dd:visible')) {
				$dd.stop().removeClass('active').animate({ opacity:'0', height:'hide' }, 150);
			} else if(!$dd.is('dd')) {
				return;
			}
			return false;
		});
	});

la verdfad que estas cosas son muy utiles… ya mismo lo implemteo en mi web

Era lo que bsucaba..

GRACIAS

Yo tengo el menu para cargar de una base de datos entonces no consigo que cuando cargo un echo de php claro se recarga la pagina. Entonces estoy ntentando que se quede desplegado el menu cuando hace on load pero como hago que se despliegue la seccion que he pulsado para cuando cargue?

Osea mi pregunta es:

$(”dd:not(:first)”) Se desplega el primero como hago para el segundo y el tercero????

Soy nuevo en jquery y queria saber si sabian Gracias

@Josef: No, todo lo contrario. este selector es usa :not(), que indica una negación a lo siguiente (:first). Osea que se aplica a todas excepto la primera.

@aNieto2k: Ok entendido. Pero claro cuando no le afecta a la primera, bien pero como le digo que segun que pagina cargue afecte a una o otra.

Lo mismo es una barbaridad por que no encuentro (:first) entonces intente con second etc y nada. Si supieras decirme porfavor me gustaria darle caña.

Lo mismo te he dicho una barbarie si es asi perdon

@aNieto2k tengo la misma duda de @Josef, quiero aplicar que se abra en un segundo . Gracias por tu tiempo.

@Stan: Padrías usar eq().

Indicando la posición, podrías hacer que el segundo, tercero,… o el que sea,… se vea. :D

@aNieto2k gracias por la sugerencia :D

Pero si borro not first y dejo esto solo:

$(”dd”).hide();

es cierto que no aparece desplegado. Aunque ya no lo puedo volver a plegar!

Lo resolvi así, pero da saltitos.

$(”dd”).hide();
$(”dt a”).click(function(){

$(”dd:visible”).slideUp(”slow”);
$(”dd:hidden”).slideDown(”slow”);
return false;
});

Hola buenas, este menu esta super, pero lastimosamente nosé como darle el efecto. Lo puse en mi web y no sale.
¿donde debo ponder el script? ¿hay que subirlo a mi servidor? y ¿cómo?
Espero alguna respuesta.

@Vandick, mira a ver si tienes en tu servidor alojado la libreria jQuery, y, si la tienes, comprueba que está en la ruta que el ejemplo llama( )

saludos!

Los links que se encuentran entre dt ej.:

jQuery

pueden redirigirse a páginas externas?

es posible? si es así, como se hace?

gracias.

saludos!

Los links que se encuentran entre dt ej.:


jQuery

pueden redirigirse a páginas externas?

es posible? si es así, como se hace?

gracias.

saludos!

Los links que se encuentran entre dt ej.:

<dt> <a_href=’xinha_editor.html’>jQuery</a></dt>

pueden redirigirse a páginas externas?

es posible? si es así, como se hace?

gracias.

PD.: perdon por reenviar el comentario, pero no lograba previsualizar el ejemplo. :)

hola, muy lindo el menu, pero una ayuda real es entregar el archivo jquery.js.
de ante mano graicas.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.