Todas las mentes viagra generico espana del mundo cialis generico espana recomiendan viagra contrareembolso prevenir problemas cialis contrareembolso

Cuando navegamos, hay ciertos comportamientos de los elementos de una web que nos ayudan a poder acceder rápidamente a otro contenido. Este es el caso del menu fijo. En este post enseñaremos cómo hacer que un menu que se mueve con el scroll quede fijo cómo este ejemplo.

la idea es esta:

fixed-menu

Para ello necesitamos el menu y un div compensador (aunque también puede hacer esa función alguno de los bloques adyacentes).

<div class="menu-compensador"></div>
<div id="my-menu" class="menu"><!--Lo que haya dentro de un menú--></div>

¿Para qué sirve el compensador? ¡Muy sencillo! Cuando nosotros quitamos el menu de la maquetación por bloques este deja de rellenar un espacio y los otros bloques se moverían, este div lo que hace es tomar la altura del menu que se vuelve autónomo.

Vamos a definir los estilos:

#my-menu {
    position: relative;
    width: 100%;
    display: block;
    /* y los demás estilos que los consideramos estéticos */
}
.menu-compensador {
    position: relative;
    width: 100%;
    display: none; /* Por defecto no lo vamos a utilizar */
}

Ahora vamos a definir el estado fixed:

#my-menu.fixed {
    position: fixed;
    top:0;
    left:0;
    right:0;
}
.menu-compensador.fixed {
    display: block;
}

El siguiente paso es hacer todas las funciones de Javascript:

$(document).ready(function(e) {
    /* Le otorgamos al menu compensador la altura del menu */
    $('.menu-compensador').css('height',$('#my-menu').height());
 
    /* Inicializa la función de scroll */
    scroll();
});
 
function getScrollOffsets() {
    /* Esto funciona para todos los navegadores excepto para IE8 y anteriores */
    if ( window.pageXOffset != null ){
        return {
            x: window.pageXOffset, 
            y: window.pageYOffset
        };
    }
 
    /* Funciona para navegadores standards */
    var doc = window.document;
    if ( document.compatMode === "CSS1Compat" ) {
        return {
            x: doc.documentElement.scrollLeft, 
            y: doc.documentElement.scrollTop
        };
    }
 
    /* Funciona para navegadores con compatibilidad con navegadores antiguos */
    return { 
        x: doc.body.scrollLeft, 
        y: doc.body.scrollTop 
    }; 
}
 
/* Ejecuta la función de scroll cuando se haga scroll */
window.onscroll = scroll;
 
function scroll(){
    var offsets = getScrollOffsets();
    var sc = offsets.y;
    var menu = $('#my-menu');
    var m_co = $('.menu-compensador');
 
    if(menu.offset().top>sc){
        menu.addClass('fixed');
        m_co.addClass('fixed');
    }else{
        menu.removeClass('fixed');
        m_co.removeClass('fixed');
    }
}

Gracias al menu compensador el contenido no hará saltos cuando se pegue en la parte superior de la pantalla.

Categorías: JavaScript, PHP
Si necesitas una url corta puede usar: codygo.es/1035

4 comentarios

  1. […] estos efectos puede ser la transformación de los elementos en base al scroll, cómo podría ser un menu que se vuelve fixed. Para ello necesitamos obtener el valor del scroll y la funciones que solía usar no funcionaban en […]

  2. Javier dice:

    if(menu.offset().top>sc){

    Del depurador de chrome
    Uncaught TypeError: Cannot read property ‘top’ of undefined at scroll

Deja un comentario