Foros del Web » Programando para Internet » Javascript » Frameworks JS »

menu como este!!!

Estas en el tema de menu como este!!! en el foro de Frameworks JS en Foros del Web. Que tal chic@s: He visto este menu: http://www.gmarwaha.com/blog/2007/08...jquery-lovers/ Y lo que quiero de el, es que cuando oprime alguna opcion el recuadro de background se ...
  #1 (permalink)  
Antiguo 02/10/2010, 15:44
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Pregunta menu como este!!!

Que tal chic@s:

He visto este menu:
http://www.gmarwaha.com/blog/2007/08...jquery-lovers/

Y lo que quiero de el, es que cuando oprime alguna opcion el recuadro de background se queda en esa seleccion hasta que se elige otra opcion, no me interesa el efecto ni el diseño... solo ese detalle de que al seleccionar alguna opcion se mantiene seleccionada...

Entonces ya modique el codigo de ejemplo pero no logro hacer eso que les comente y no se si haya algo que se me paso, por eso pido su ayyuda para poder hacerlo funcionar...

Este es el css que he modificado y aumentado a mis necesidades, los comentarios son el codigo original:

Código:
.menu_principal { /*.lavaLampWithImage {*/
           /* 
            position: relative;
            height: 29px;
            width: 421px;
            background: url("bg.gif") no-repeat top;
            padding: 15px;
            margin: 10px 0;
            overflow: hidden;*/
            margin:0;
            padding:3px 10px 0 10px;
            list-style:none;
        }
        .menu_principal li {
            /*float: left;
            list-style: none;
            */
            display:inline;
            margin:0;
            padding:0;
       }
       .menu_principal li a {
             /*   font: bold 14px arial;
             text-decoration: none;
             color: #fff;
             outline: none;
             text-align: center;
             top: 7px;
             text-transform: uppercase;
             letter-spacing: 0;
             position: relative;
             display: block;
             float: left;
             height: 30px;
             z-index: 10;
             overflow: hidden;
             margin: auto 10px;  
             */
             float:left;
             background:url("../images_menu/orilla.gif") no-repeat left top;
             margin:0;
             padding:0 0 0 5px;
             text-decoration:none;  
         }
         .menu_principal li a span{
	display:block;
	background:url("../images_menu/cuadro.gif") no-repeat right top;
	padding:5px 15px 4px 6px;
	color: #01603a;	
         }
         .menu_principal li a:hover, .menu_principal li a:active {
	background-position:0% -42px;
         }
         .menu_principal a:hover span{
	color:#FFF;
	background-position:100% -42px;
          }
          .menu_principal li.back {
                /* background: url("lava.gif") no-repeat right -30px;
                width: 9px; height: 30px;
                z-index: 8;
                position: absolute;
	*/
	background:url("../images_menu/orilla.gif") no-repeat left top;
	background-position:0% -42px;
           }
           .menu_principal li.back .left {
              	/*background: url("lava.gif") no-repeat top left;
                height: 30px;
                margin-right: 9px; 
	*/
	color:#FFF;
	background:url("../images_menu/cuadro.gif") no-repeat right top;
	background-position:100% -42px;
            }
el index:

Código HTML:
<link rel="stylesheet" href="../CIByR/css/menu.css" type="text/css" media="screen">
    <script type="text/javascript" src="../CIByR/css/jquery.lavalamp.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#1").lavaLamp({
                fx: "backout", 
                speed: 700,
                click: function(event, menuItem) {
                    return false;
                }
            });
        });
    </script>
<!--abrevio algo de codigo...-->
<ul class="menu_principal" id="1">
    <li class="back"><div class="left"></div></li>
    <li><a href="index.php"><span>Consulta</span></a></li>
    <li><a href="javascript:loadurl('../CIByR/pag_resguardo/formular_resguardo.php', 'trabajo')"><span>Formular</span></a></li>
   <li><a href="javascript:loadurl('../CIByR/pag_operador/monitor.php', 'trabajo')" ><span>Resguardos</span></a></li>
  <li><a href="javascript:loadurl('../CIByR/pag_operador/bienes_AF.php', 'trabajo')" ><span>Activo</span></a></li>
  <li><a href="javascript:loadurl('../CIByR/pag_operador/bienes_PV.php', 'trabajo')" ><span>Bienes</span></a></li>
  <li><a href="javascript:loadurl('../CIByR/pag_admin/usuarios.php', 'trabajo')" ><span>Control</span></a></li>
</ul> 
y el js:

Código:
(function($) {
$.fn.lavaLamp = function(o) {
    o = $.extend({ fx: "linear", speed: 500, click: function(){} }, o || {});

    return this.each(function() {
        var me = $(this), noop = function(){},
            $back = $('<li class="back"><div class="left"></div></li>').appendTo(me),
            $li = $("li", this), curr = $("li.current", this)[0] || $($li[0]).addClass("current")[0];

        $li.not(".back").hover(function() {
            move(this);
        }, noop);

        $(this).hover(noop, function() {
            move(curr);
        });

        $li.click(function(e) {
            setCurr(this);
            return o.click.apply(this, [e, this]);
        });

        setCurr(curr);

        function setCurr(el) {
            $back.css({ "left": el.offsetLeft+"px", "width": el.offsetWidth+"px" });
            curr = el;
        };

        function move(el) {
            $back.each(function() {
                $.dequeue(this, "fx"); }
            ).animate({
                width: el.offsetWidth,
                left: el.offsetLeft
            }, o.speed, o.fx);
        };

    });
};
})(jQuery);
Gracias
  #2 (permalink)  
Antiguo 02/10/2010, 15:57
 
Fecha de Ingreso: agosto-2008
Ubicación: Cali . Colombia
Mensajes: 459
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: menu como este!!!

No veo donde se llame el JQuery?
__________________
Jaime P. Bravo
Programador Web
MCP (Microsoft Certified Professional)
  #3 (permalink)  
Antiguo 02/10/2010, 16:06
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

Lo único que necesitas es poner una imagen de fondo para un elemento seleccionado? Entonces no uses el plugin. Usa esto:

Código Javascript:
Ver original
  1. $("li").hover(function() {
  2.            
  3.        $(this).css("background-image","url(bg.gif)" )
  4.  
  5.         });
Si no queres el evento hover, usa click. O lo que fuere.
  #4 (permalink)  
Antiguo 02/10/2010, 16:39
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

Gracias por contestar:

Primero [soldierjesus] si lo incluyo nada mas que alli tengo confusion por que originalmete ya ocupaba un jquery v1.4.2 (<script src="../CIByR/js/jquery.js" type="text/javascript" charset="UTF-8"></script> ) y el ejemplo maneja otro (<script type="text/javascript" src="jquery-1.1.3.1.min.js"></script>) y preferi dejar el mio...aunque no se que consecuencias tenga...

Segundo [mayid] gracias por ese aporte se me hace muy interesante, pero disculpa no entendi bien, no necesito nada nada solo agregar ese coodigo??? osea, no necesito el script js que puse en un principio???? y pendon en donde agregaria ese codigo que me pones???
y por ultimo lo de poner la imagen background, tengo un inconveniente ya que digamos que el boton lo formo con dos imagenes una "orilla" y otra el "relleno" si ves mi css que puse ahi las mando a llamar, como pondria esas dos imagenes en el codigo??? ademas de que llamo mas de un archivo css, afectaria al codigo??

Última edición por catpaw; 02/10/2010 a las 21:21
  #5 (permalink)  
Antiguo 03/10/2010, 08:21
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

Vuelvo a decir que si solo querés poner una imagen de fondo, y no un efecto como el del plugin, no uses el plugin.

El ejemplo que te puse puede que no funcione porque era solo para orientarte. En si, al evento hover le falta el segundo parametro... Pero es un ejemplo de como poner una imagen de fondo.

La otra manera es añadir y quitar un estilo dinamicamente:
Código Javascript:
Ver original
  1. span .cuadro {
  2.     background:url("../images_menu/cuadro.gif") no-repeat right top;
  3. }
  4.  
  5. ...
  6.  
  7. $("li").click(function() {
  8.         $("li").removeClass(".cuadro" );  // a todo <li> se le quita el estilo
  9.        $(this).addClass(".cuadro" );   // se le añade el estilo al clickeado
  10.         });

Te vuelvo a decir que son ejemplos ilustrativos. Vos tendrás que ajustarlos a tus necesidades.

Si necesitas poner fondo a dos elementos continuos, quizas podes usar .prev() o algun otro metodo de traversing...
  #6 (permalink)  
Antiguo 04/10/2010, 11:16
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Pregunta Respuesta: menu como este!!!

hola mayid, disculpa q no habia contestado antes, gracias por tu explicacion, he estado investugando un poco y un mucho porque no se casi de jquery, y bueno mira, este es el codigo al que he llegado pero no hace nada entonces no se q pueda estar pasando. Ta agradeceria mucho si me echas la mano para arreglar mi codigo.

Mi clase css:

Código:
.selected{
	float:left;
	background:url("../images_menu/orilla.gif") no-repeat left top;
	background-position:0% -42px;
	margin:0;
	padding:0 0 0 5px;
	text-decoration:none;		  
}
.selected_span{
	display:block;
	background:url("../images_menu/cuadro.gif") no-repeat right top;
	background-position:100% -42px;
	padding:5px 15px 4px 6px;
	color:#FFF;
}
y mi index (abreviado):

Código HTML:
<html>
<head>
<link rel="stylesheet" href="../CIByR/css/principal.css" type="text/css" />
<script src="../CIByR/js/jquery.js" type="text/javascript" charset="UTF-8"></script> 
<script>
  $(document).ready(function() {
    $("li").click(function () {
    	alert ("entro");
      $(this).addClass("selected");
      $(this).addClass("selected_span");
      $("li").removeClass("selected" );
      $("li").removeClass("selected_span" );
    });
  });
</script>
</head>
<body>
<ul>
<li><a href="xxx"><span>Home/span></a></li>
<li><a href="xxx"><span>Formular</span></a></li>
<li><a href="xxx"><span>Resguardos</span></a></li>
<li><a href="xxx" ><span>Activo</span></a></li>
<li><a href="xxx"><span>Valor</span></a></li>
<li><a href="xxx"><span>Control</span></a></li>
</ul>
</body>
</html> 
Gracias...

edito: se me olvido comentar, el alert del script si entra...
  #7 (permalink)  
Antiguo 04/10/2010, 18:01
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

Código:
<script>
$(document).ready(function() {
   $("#menu_principal li").click(function () {
      $("#menu_principal li").removeClass(".selected");
      $("#menu_principal li").removeClass(".selected_span");	
      $(this).addClass(".selected");
      $(this).addClass(".selected_span");
    });
  });
</script>
Hola tambie probe asi pero nada... disculpen la lata pero porfavor instruyanme... ya no doy con jquery

Gracias
  #8 (permalink)  
Antiguo 05/10/2010, 06:50
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

Esto último que publicaste parece bueno. Por qué no funciona?

Estás seguro de que los estilos están bien construidos? Y por qué tenes dos?
  #9 (permalink)  
Antiguo 05/10/2010, 06:52
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

Proba con algo simple:
Código CSS:
Ver original
  1. .selected{
  2.     float:left;
  3.     background:#99f;     
  4. }
  5. .selected_span{
  6.     display:block;
  7.     background: #f99;  
  8.     color:#FFF;
  9. }
  #10 (permalink)  
Antiguo 05/10/2010, 07:33
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

Pues no jala, no se...
Tengo dos imagenes por q el "boton" de cada opcion del menu lo hago poniendo primero una orilla y con el span lo demas del relleno, estas son las imagenes con las que hago los botones:

la orilla:


el relleno:



Aca una imagen del menu (click para verla mas grande):



Este es todo mi estilo del menu:

Código:
#menu_principal_ext{

}

#menu_principal{
	margin-left: auto;
	margin-right: auto;
	width: 85%;
	height: 31px;
	border-left: solid #01814E 1px; 
	border-right: solid #01814E 1px;
	background: #FFFFFF; 
	line-height: 14pt;
	border-bottom: 1px solid #01814E;
	font-family: Comic Sans MS, Arial, sans-serif;
	font-size: 10pt;
	font-weight: bold;
}

#menu_principal ul{
	margin:0;
	padding:3px 10px 0 10px;
	list-style:none;
}
  
#menu_principal li{
	display:inline;
	margin:0;
	padding:0;
}
  
#menu_principal a{
	float:left;
	background:url("../images_menu/orilla.gif") no-repeat left top;
	margin:0;
	padding:0 0 0 5px;
	text-decoration:none;
}
  
#menu_principal a span{
	display:block;
	background:url("../images_menu/cuadro.gif") no-repeat right top;
	padding:5px 15px 4px 6px;
	color: #01603a;
}

#menu_principal a:hover{
	background-position:0% -42px;
}

#menu_principal a:hover span{
	color:#FFF;
	background-position:100% -42px;
}

.selected{
	float:left;
	background:url("../images_menu/orilla.gif") no-repeat left top;
	background-position:0% -42px;
	margin:0;
	padding:0 0 0 5px;
	text-decoration:none;		  
}
.selected_span{
	display:block;
	background:url("../images_menu/cuadro.gif") no-repeat right top;
	background-position:100% -42px;
	padding:5px 15px 4px 6px;
	color:#FFF;
}
El hover funciona bien, al pasar el raton por alguna opcion me cambia el color a verde, pero ya al darle click a alguno deberia quedarse de color verde, cosa q no ocurre...este script deberia funcionar no??

Código:
  $(document).ready(function() {
    $("#menu_principal li").click(function () {
			$("#menu_principal li").removeClass("selected");
			$("#menu_principal li").removeClass("selected_span");	
			$(this).addClass("selected");
			$(this).addClass("selected_span");
    });
  });
Espero me puedan seguir ayudando...Gracias
  #11 (permalink)  
Antiguo 05/10/2010, 09:18
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

Pero estás usando ajax para el menu? Si no, te estarías yendo a otra pagina, y consecuentemente el script no funcionaría. En ese caso, necesitarías un poco más de código. Quizás con PHP. (nota: CSS3 contempla esto, por cierto).
  #12 (permalink)  
Antiguo 05/10/2010, 09:31
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

Efectivamente, uso una funcion ajax para cargar los div's en lugar de traer y traer paginas, pero entonces, ese script no funciona por usar ajax en el menu?? conclusion jquery no es la respuesta??

con php es mucho mucho lio, mejor investigare css3

Gracias
  #13 (permalink)  
Antiguo 05/10/2010, 10:26
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

No, no. DIje que sin ajax es un lio. Con ajax todo debería ir bien!

No entiendo por qué no te funciona el código. Pero estoy casi seguro de que es por temas de CSS. Mirá:

cambia esto:
$(this).addClass("selected_span");

por esto:
$(this).children("span").addClass("selected_span") ;

Mismo, cambia esto:
$("#menu_principal li").removeClass("selected_span");

por esto:
$("#menu_principal li").children("span").removeClass("selected_span") ;

Respecto al estilo del <li>: no tiene definida ninguna altura y por eso no lo podes ver, creo.
  #14 (permalink)  
Antiguo 05/10/2010, 10:44
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

Probe y no jala...

hice un pequeño cambio al css:

En lugar de:

Código:
.selected{
	float:left;
	background:url("../images_menu/orilla.gif") no-repeat left top;
	background-position:0% -42px;
	margin:0;
	padding:0 0 0 5px;
	text-decoration:none;		  
}
.selected_span{
	display:block;
	background:url("../images_menu/cuadro.gif") no-repeat right top;
	background-position:100% -42px;
	padding:5px 15px 4px 6px;
	color:#FFF;
}
puse esto:

Código:
#menu_principal a.selected{
	background-position:0% -42px;
}

#menu_principal a.selected span{
	color:#FFF;
	background-position:100% -42px;
}
Pensando en q la clase selected "hereda" las demas propiedades de #menu_principal a y #menu_principal a span

y entonces puse el script asi:

Código:
  $(document).ready(function() {
    $("#menu_principal li").click(function () {
    	$("#menu_principal a").removeClass("selected");
	$("#menu_principal a").children("span").removeClass("selected");	
	$(this).addClass("selected");
	$(this).children("span").addClass("selected");
    });
  });
y bueno tampoco

Edito: creo q ya hay un avance al menos...

Asi como te acabo de poner el codigo anterior, puse a una de mis opciones la clase selected por defaul osea:

Código HTML:
<li><a href="index.php" class="selected"><span>Home</span></a></li>
<li><a href="xxx"><span>Formular</span></a></li>
<li>...</li>
...
Lo que me muestra esa opcion con mi imagen verde y las demas grises
y al dar clic a otra opcion si la remueve!!! me pone la imagen gris, pero ya no se queda seleccionada la otra opcion...algo falta

Gracias mayid, espero me puedas seguir echando la mano

Última edición por catpaw; 05/10/2010 a las 10:52
  #15 (permalink)  
Antiguo 05/10/2010, 14:27
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: menu como este!!!

Acabo de darme cuenta de que $(this) va a seleccionar un elemente <li>, y children un elemento <span>, mientras que vos querés darle estilo a un elemento <a>

Para solucionar eso, poder usar también la jerarquia:

Código Javascript:
Ver original
  1. $(this).children("a").addClass("selected");
  2. $(this).children("a span").addClass("selected_span");

Última edición por mayid; 05/10/2010 a las 14:37
  #16 (permalink)  
Antiguo 05/10/2010, 17:31
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
De acuerdo Respuesta: menu como este!!!

Mayid en verdad te agradezco mucho mucho tu ayuda, ya funciono!!
Con lo ultimo que me especificaste anda perfecto.

Asi quedo x ultimo el scrip:

Código:
  $(document).ready(function() {
    $("#menu_principal li").click(function () {
       $("#menu_principal a").removeClass("selected");
       $("#menu_principal a").children("#menu_principal a span").removeClass("selected");
       $(this).children("#menu_principal a").addClass("selected");
       $(this).children("#menu_principal a span").addClass("selected");	
    });
  });
Gracias
  #17 (permalink)  
Antiguo 19/06/2014, 14:52
 
Fecha de Ingreso: junio-2014
Mensajes: 2
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: menu como este!!!

Hola a todos
Soy muy novato en esto.
Tengo un menu horizontal con el mismo problema. Veo que hay unas lineas de código con la solución, pero no se en que archivo y en que sección lo debo colocar.

Agradesco a quien me pueda ayudar
  #18 (permalink)  
Antiguo 20/06/2014, 07:20
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

hola, el codigo lo debes poner dentro de las etiquetas script en el encabezado, pero debes asegurarte tambien de incluir la libreria jquery,

Código HTML:
<!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>
<script  type="text/javascript" src="jquery/jquery-1.9.1.js"></script> <!--incluimos la libreria-->
<script  type="text/javascript">
$(document).ready(function() {
    $("#menu_principal li").click(function () {
       $("#menu_principal a").removeClass("selected");
       $("#menu_principal a").children("#menu_principal a span").removeClass("selected");
       $(this).children("#menu_principal a").addClass("selected");
       $(this).children("#menu_principal a span").addClass("selected");	
    });
  });
</script>
</head
<body>
  tu codigo
</body>
</html<
tambien no se te olvide incluir tu hoja de estilos

aca te descargas la libreria jquery http://jquery.com/download/

suerte!!
  #19 (permalink)  
Antiguo 25/06/2014, 10:32
 
Fecha de Ingreso: junio-2014
Mensajes: 2
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: menu como este!!!

Hola CATPAW, gracias por tu ayuda. En donde debo colocar el archivo jquery o se debe agregar el código del jquery en el archivo html?.

De nuevo gracias.
  #20 (permalink)  
Antiguo 26/06/2014, 07:26
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: menu como este!!!

Todos los archivos externos, tanto js como css se pueden alojar en la misma carpeta donde tengas tu script y para incluirlos en tu script los debes mandar a llamar con la instrucción:

Código HTML:
<!--js-->
<script  type="text/javascript" src="jquery-1.9.1.js"></script> <!--en el src pones la ruta para acceder al archivo-->
<!--css-->
<link rel="stylesheet" type="text/css" href="estilos.css" /> 
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 15:49.