Foros del Web » Programando para Internet » Jquery »

Menu desplegable con botonera y slideToggle

Estas en el tema de Menu desplegable con botonera y slideToggle en el foro de Jquery en Foros del Web. Hola, mi duda es la siguiente... resulta que estoy armando la estructura básica para un menú horizontal desplegable que al abrirse empuje todo lo que ...
  #1 (permalink)  
Antiguo 05/12/2014, 09:54
 
Fecha de Ingreso: diciembre-2014
Ubicación: santiago
Mensajes: 1
Antigüedad: 10 años
Puntos: 0
Sonrisa Menu desplegable con botonera y slideToggle

Hola,

mi duda es la siguiente... resulta que estoy armando la estructura básica para un menú horizontal desplegable que al abrirse empuje todo lo que hay bajo el. Estoy utilizando SlideToggle para abrir y cerrar el menú.

El problema es que tengo diferentes botones que despliegan cada uno un div asociado. Cuando despliego el primer botón (o el boton que sea) se abre el div correspondiente sin problemas. El problema aparece cuando pincho otro botón para desplegar un nuevo menú, quedan los dos menús abiertos.

Lo que quiero lograr es que cuando pinche otro botón se cierre el que ya se encuentra desplegado.

Soy principiante en Jquery, imagino que solo me falta algo pequeño en el js.

Les dejo el codigo:

Código:
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Menu</title>

<script src="jquery-1.8.3.js"></script>

<script type="text/javascript">
$(document).ready(function() {
	$('#boton1').click(function() {
		$('#contenidomenu1').slideToggle(300);
	});
	
	$('#boton2').click(function() {
		$('#contenidomenu2').slideToggle(300);
	});
	
	$('#boton3').click(function() {
		$('#contenidomenu3').slideToggle(300);
	});
	
});
</script>
</head>

<body>

<div id="botonera" style="background:transparent;display:block;width:100%;height:40px;">
    <div id="boton1" style="background:yellow;display:block;width:100px;height:40px; color:white; float:left;" onclick="">Boton</div>
    <div id="boton2" style="background:green;display:block;width:100px;height:40px; color:white; float:left;">Boton</div>
    <div id="boton3" style="background:orange;display:block;width:100px;height:40px; color:white; float:left;">Boton</div>
</div>

<div id="cuerpomenu" style="background:grey;width:100%;height:auto;">

    <div id="contenidomenu1" style="background:black;display:none;width:100%;height:300px;"></div>
    <div id="contenidomenu2" style="background:blue;display:none;width:100%;height:300px;"></div>
    <div id="contenidomenu3" style="background:orange;display:none;width:100%;height:300px;"></div>

</div>

<div id="cuerpositio" style="background:red;width:100%;height:300px;">
	<p>AQUI VA EL CONTENIDO DE LA WEB</p>
</div>

</body>
</html>
  #2 (permalink)  
Antiguo 05/12/2014, 14:58
Avatar de andresgarciadev  
Fecha de Ingreso: junio-2013
Mensajes: 218
Antigüedad: 11 años, 5 meses
Puntos: 32
Respuesta: Menu desplegable con botonera y slideToggle

podrias hacer algo como esto
http://jsfiddle.net/z990se9o/
que crea una funcion que oculta todos los div dentro de cuerpomenu antes de abrir el seleccionado
aun asi te recomiendas que veas como mejorar tu codigo, mira como usar atributos data y generalizar mas tu codigo para reutilizarlo no crear un .click() para cada uno
  #3 (permalink)  
Antiguo 07/12/2014, 12:19
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Menu desplegable con botonera y slideToggle

Esto ahora se hace con CSS3 puro. Javascript se limita a meter o quitar clases nada mas.

Para la animacion se usa el animatin: height, para que la capa pinchaza aparezca por encima, he usado el z-index, y para que los submenus no desplacen el contenido de abajo, solo había que meterl divs positon absolute en un div position relativo de dentro del menú.

http://jsfiddle.net/marlanga/z990se9o/2/

Última edición por marlanga; 07/12/2014 a las 12:24
  #4 (permalink)  
Antiguo 10/12/2014, 03:47
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 10 meses
Puntos: 29
Respuesta: Menu desplegable con botonera y slideToggle

Aunque las mejores soluciones serían rehacer el código como te dicen arriba, te propongo una solución simple para tu código:

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2. var activo = undefined; //guardaremos aquí el activo
  3.  
  4.     $('#boton1').click(function() {
  5.         $('#contenidomenu1').slideDown(300);
  6.                 $('#contenidomenu'+activo).slideUp(300);
  7.     });
  8.    
  9.     $('#boton2').click(function() {
  10.         $('#contenidomenu2').slideDown(300);
  11.                 $('#contenidomenu'+activo).slideUp(300);
  12.     });
  13.    
  14.     $('#boton3').click(function() {
  15.         $('#contenidomenu3').slideDown(300);
  16.                 $('#contenidomenu'+activo).slideUp(300);
  17.     });
  18.    
  19. });

De todas formas, ese código es una locura mantenerlo. Lo tendrías muchísimo más fácil si utilizaras la propiedad "rel" o algún invento parecido:

Código HTML:
Ver original
  1. <div id="botonera" style="background:transparent;display:block;width:100%;height:40px;">
  2.     <div class="boton" rel="1" style="background:yellow;display:block;width:100px;height:40px; color:white; float:left;" onclick="">Boton</div>
  3.     <div class="boton" rel="2" style="background:green;display:block;width:100px;height:40px; color:white; float:left;">Boton</div>
  4.     <div class="boton" rel="3" style="background:orange;display:block;width:100px;height:40px; color:white; float:left;">Boton</div>
  5. </div>
  6.  
  7. <div id="cuerpomenu" style="background:grey;width:100%;height:auto;">
  8.  
  9.     <div class="contenidomenu" rel="1" style="background:black;display:none;width:100%;height:300px;"></div>
  10.     <div class="contenidomenu" rel="2" style="background:blue;display:none;width:100%;height:300px;"></div>
  11.     <div class="contenidomenu" rel="3" style="background:orange;display:none;width:100%;height:300px;"></div>
  12.  
  13. </div>

ASí podrías detectar el click del botón:
Código Javascript:
Ver original
  1. var activo = undefined;
  2. $('.boton').on('click', function(e) {
  3.       e.preventDefault();
  4.       $('.contenidomenu[rel='+$(this).attr('rel')+']').slideDown(250); // $(this).attr('rel') te devuelve el atributo REL
  5.       if(activo !== undefined)  {
  6.            $('.contenidomenu[rel='+activo+']').slideUp(250); // aquí se oculta el activo
  7.       }
  8.       activo = $(this).attr('rel');
  9. });
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Etiquetas: botonera, desplegable, slidetoggle
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:16.