2010-10-21 15 views
17

Tengo el siguiente script de desplazamiento, que se desplaza perfectamente por la página, funciona exactamente como yo lo quiero.JQuery ¿Desplazarse a Compensación desde la parte superior del navegador?

$(function(){ 
    $('a[href*=#]').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') 
     && location.hostname == this.hostname) { 
      var $target = $(this.hash); 
      $target = $target.length && $target || $('[name=' + this.hash.slice(1) +']'); 
      if ($target.length) { 
       var targetOffset = $target.offset().top; 
       $('html,body').animate({scrollTop: targetOffset}, 1000); 
       return false; 
      } 
     } 
    }); 
}); 

Sin embargo, lo necesito hacer caso omiso de la parte superior 200 píxeles digo que tengo una cabecera fija en la parte superior de la página que los rollos de contenido atrás.

Lo que significa que cuando me desplazo hacia arriba, desplaza el contenido detrás del encabezado fijo para que no pueda verlo, por lo que necesito desplazarme justo debajo del encabezado ... para tratar la parte inferior del encabezado como la parte superior del navegador supongo ....

¿Se puede hacer esto ya que sería muy útil?

Muchas gracias por cualquier ayuda

+0

Gracias por hacer esta pregunta estado luchando toda la noche tratando de entender cómo lograr esto por la misma razón! – Robert

Respuesta

26

¿Podría algo así como este trabajo?

var targetOffset = $target.offset().top - 200; 

O agarre la altura del elemento de encabezado para el desplazamiento adicional.

var targetOffset = $target.offset().top - $("element").outerHeight(true); 
1

Usted podría utilizar algo como esto si la condición de ur código para hacer que

//check if the absolute position is below header 
if ($('#IdOfTheScrollElement').position().top >= 200){ 
//scroll 
} 
else { 
//do nothing 
} 
+0

Gracias muchachos por su ayuda. No estoy seguro si funcionan, ya que no pude encontrar dónde ponerlos en el código para tener un efecto, en casos de niebla simplemente rompí el pergamino :( – Jezthomp

0

El código está bien, solo tiene que quitar la altura de su encabezado fijo aquí, por ejemplo si es 200px. funcionará perfectamente

$('html,body').animate({scrollTop: (targetOffset().top)-200}, 1000); 

También puede comprobar esto cuando se hace clic en un botón

$(function() { 

$('a[href*=#]:not([href=#])').click(function() { 

    // Check height of the header and padding 
    var header_height = $('.header').outerHeight(); 

eliminarlo de su desplazamiento

$('html,body').animate({scrollTop: (targetOffset().top) - header_height }, 1000); 
Cuestiones relacionadas