Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/06/2011, 03:00
Avatar de PosProdukcion
PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 19 años, 4 meses
Puntos: 9
Modificar ancho + bind evento a menú

Hola, estoy trabajando con un menú desplegable que podéis ver aquí. Me encuentro con dos problemas relacionados con jquery.

PRIMERO
En principio el menú está centrado en la página, en $(document).ready hago unos cálculos para que la parte derecha se extienda del todo hasta el borde de la página. Como veis se queda a una pequeña distancia del borde, según el tamaño de pantalla que tengáis a lo mejor teneis que hacer un poco de scroll horizontal para verlo.

Los cálculos que hago son:

A) Calculo la posición izquierda del menú
B) Determino el ancho de la pantalla
C) Calculo el ancho deseado del menú como B-A

Código Javascript:
Ver original
  1. var posicion_absoluta_menu = $('#divNavegacion ul.menu-navegacion').offset().left;
  2.  
  3. if (typeof window.innerWidth != 'undefined')
  4.         {
  5.               viewportwidth = window.innerWidth
  6.         }
  7.           // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
  8.          else if (typeof document.documentElement != 'undefined'
  9.              && typeof document.documentElement.clientWidth !=
  10.              'undefined' && document.documentElement.clientWidth != 0)
  11.         {
  12.                viewportwidth = $(document).width();
  13.         }
  14.          // older versions of IE
  15.          else
  16.         {
  17.                viewportwidth = document.getElementsByTagName('body')[0].clientWidth
  18.         }
  19.                    
  20.         ancho_deseado_menu = viewportwidth-posicion_absoluta_menu;

Entiendo que alguno de los cálculos se deja un padding o margin o algo así. Me gustaría obtener valores EXACTOS. (por cierto, antes calculaba el ancho de la pantalla con jquery, pero el resultado era peor en algunos navegadores)

SEGUNDO
El menú funciona con CSS hover, pero quiero suavizar el efecto de despliegue y para ello asigno unos eventos hover a las entradas de menú, pero no funciona siempre, lo más normal es que cuando entras en la página, la primera vez que pasas por el menú funciona el efecto suavizado, pero las siguientes veces no se suavice, parece que solo va por el CSS hover.

Código Javascript:
Ver original
  1. //Modifica el evento over para suavizar el despliegue del menu
  2.         $('#divNavegacion ul.menu-navegacion li.entrada-menu').mouseover(function()
  3.         {
  4.             id_entrada = '#'+$(this).attr('id');
  5.            
  6.             //Si tiene submenu...
  7.             if ($(id_entrada + '>ul.submenu').length>0)
  8.             {
  9.                 $(id_entrada + '>ul').animate(
  10.                             {height: '22px'},
  11.                             "slow");
  12.             }
  13.             }
  14.  
  15.         });

¿Sabéis por qué puede ocurrir esto?

Gracias