Mundo Web
manuales - recursos - gráficos - programación...

Home - WebScript - Menús

Menú nervioso
por Luciano Moreno, del departamento de diseño web de BJS Software.


Os presento esta vez un menú dinámico, original de Martial Boissonneault (http://getElementById.com/), que aunque solo es válido para los navegadores de última generación (Internet Explorer 5x/6x y Nestcape Navigator 6x), crea un efecto muy interesante y vistoso para cualquier página que construyáis.

Además, es muy interesante desde el punto de vista técnico, ya que, usando el acceso a los elementos de un documento html propuestos por el WWW en el modelo DOM, consigue modificar propiedades de estilo de los mismos con un código simple y claro.

El código necesario para la página es el siguiente:

<html>
<head>
  <title>Menu nervioso</title>
  <style type="text/css">
    .menulinks {position:relative;}
    #menucont a{color:#006699; font-weight:bold; text-decoration:none;}
    #menucont a:hover{color:#ff0000; font-weight:bold; text-decoration:underline overline; text-transform: uppercase;}
  </style>

  <script language="JavaScript" type="text/JavaScript">
  /**
  * Script creado por Martial Boissonneault © 2001 http://getElementById.com/

  * Traducido y adpatado por Luciano Moreno         http://www.htmlweb.net
  * Script valido para Internet Explorer 5x y Nestcape Navigator 6x (navegadores de quinta generacion)
  */
    /**
    *var espacioLetras > espacio maximo entre cada letra
    *var velocidad > velocidad de la animacion
    *var temporizador > contador de tiempo para activar la funcion menuNervioso()
    */
    espacioLetras=5;
    velocidad=100;
    temporizador=null;
    /**
    * funcion principal para animar el menu
    */
    function menuNervioso()
    {
      /**
      * para aplicar solo a Internet Explorer 5x y Nestcape Navigator 6x
      */
      if(document.getElementById)
      {
        /**
        * obtenemos aleatoriamente uno de los enlaces, para cambiar la separacion de sus letras
        */
        lnks = Math.floor(Math.random()*lnk.length);
        /**
        * obtenemos aleatoriamente una separacion entre las letras
        */
        letterSpacing = Math.floor(Math.random()*espacioLetras);
        /**
        * aplicamos la separacion aleatoria al enlace aleatorio
        */
        lnk[lnks].style.letterSpacing = letterSpacing + "px";
        /**
        * volvemos a llamar a la funcion cada "velocidad" milisegundos
        */
        temporizador = setTimeout("menuNervioso()", velocidad);
      }
    }
    /**
    * funcion para detener la animacion cuando ponemos el puntero sobre uno de los enlaces
    */
    function StopMenu()
    {
      if(document.getElementById)
      {
        /**
        * borramos el temporizador, para que no se vuelva a llamar la funcion
        */
        clearTimeout(temporizador);
        /**
        * volvemos todos los enlaces a su separacion de letras original
        */
        for(i=0;i<lnk.length;i++)
          lnk[i].style.letterSpacing = 0 + "px";
      }
    }
    /**
    * funcion para iniciar el menu y la animacion
    */
    function iniciaMenu()
    {
      if(document.getElementById)
      {
        /**
        * accedemos a las etiquetas "a" de la capa "menucont"
        */
        lnk = document.getElementById("menucont").getElementsByTagName("a");
        /**
        * asignamos el objeto-capa "menucont" a una variable, para no tener que repetir su ruta de acceso
        */
        cnt = document.getElementById("menucont");
        /**
        * centramos los contenidos de la capa "menucont", accediendo a su estilo
        */
        cnt.style.textAlign= "center";
        /**
        * capturamos el evento mouseover, llamando con el a la funcion que detiene la animacion
        */
        cnt.onmouseover=StopMenu;
        /**
        * capturamos el evento mouseout, volviendo a iniciar la animacion
        */
        cnt.onmouseout=menuNervioso;
        /**
        * llamamos a la funcion de animacion del menu
        */
        menuNervioso();
      }
    }
    /**
    * capturamos el ebento onload de la pagina, para que inicie la animacion cuando se acabe de cargar
    */
    onload=iniciaMenu;
  </script>
</head>
<body>
<div id="menucont">
  <!-- centramos el menu para navegadores antiguos -->
  <center>
   <a href="#" id= "a1"class="menulinks" onClick="return false">HTMLWeb</a><br>
   <a href="#" id= "a2"class="menulinks" onClick="return false">Manual de HTML</a><br>
   <a href="#" id= "a3"class="menulinks" onClick="return false">Articulos varios sobre DHTML</a><br>
   <a href="#" id= "a4"class="menulinks" onClick="return false">Articulos y scripts de JavaScript</a><br>
   <a href="#" id= "a5"class="menulinks" onClick="return false">Temas diversos sobre seguridad</a><br>
   <a href="#" id= "a6"class="menulinks" onClick="return false">Manual de redes</a><br>
   <a href="#" id= "a7"class="menulinks" onClick="return false">Articulossobre diseño web</a>
  </center>
</div>
</body>
</html>

Consideraciones:

1) Definimos dos estilos para los enlaces contenidos en la capa principal del menú, uno para su estado normal y otro para su estado "mouseover", es decir, para cuando situamos el puntero sobre los mismos. En este caso, pasamos a letras mayúsculas, con subrayado y superrayado, y con color rojo. Para esto no hace falta nada especial en estos navegadores, tan solo definir sus estilos correspondientes.

2) Usamos el método random() del objeto Math para obtener números aleatorios entre 0 y 1, y el método Floor(), también del objeto Math, para redondear a enteros. También usamos, al igual que en otros scripts ya vistos, los métodos setTimeout("funcion",intervalo) para llamar a una función cada x milisegundos, y clearTimeout() para borrar el temporizador creado con el método anterior.

3) Accedemos a la capa mediante el objeto getElementById('capa'), y a los enlaces que contiene mediante getElementsByTagName('tag'), y a partir de aquí accedemos a las propiedades de estilo de los mismos, modificando sus valores.

El resultado de este código podéis verlo pinchando aquí.

Si tenéis alguna duda, escribidnos.



Home - HTMLWebScript - Menús