2012-05-19 11 views
6

Lo quiero obtener así que el último div en mi barra lateral permanece fijo cuando la página se desplaza, pero se detiene en el pie de página. Lo tengo casi trabajando con un online tutorial, pero el cálculo se arruina cuando los comentarios de descarga se cargan y solo llega a cierto punto.Detener la división flotante de la barra lateral adhesiva en el pie de página (casi en funcionamiento)

Aquí hay una versión de trabajo http://jsfiddle.net/k56yR/1/, pero ¿hay una manera fácil de hacer algo como calcular la altura del pie de página y luego decirle que deje de desplazarse tan lejos de la parte inferior de la página?

Respuesta

14

Creo que su problema es que su valor de $('#footer').offset().top cambia después de la carga de sus comentarios vacíos. Por lo tanto, debe actualizar footerTop (y limit según el nuevo valor footerTop) después de cargar sus comentarios o cada vez que se desate el evento.

algo como:

$(function(){ // document ready 
    if ($('#sticky').length) { // make sure "#sticky" element exists 
     var el = $('#sticky'); 
     var stickyTop = $('#sticky').offset().top; // returns number 
     var stickyHeight = $('#sticky').height(); 

     $(window).scroll(function(){ // scroll event 
      var limit = $('#footer').offset().top - stickyHeight - 20; 

      var windowTop = $(window).scrollTop(); // returns number 

      if (stickyTop < windowTop){ 
      el.css({ position: 'fixed', top: 0 }); 
      } 
      else { 
      el.css('position','static'); 
      } 

      if (limit < windowTop) { 
      var diff = limit - windowTop; 
      el.css({top: diff}); 
      } 
     }); 
    } 
}); 

Al igual que con la mayoría de los casos, hay un plugin de jQuery para esto, como julianm señaló en su comentario, disponible here. También admite un valor de tope para detener la caja adhesiva en cualquier posición deseada.

+0

Gracias, casi está trabajando ahora. Pensé que sí, pero con diferentes navegadores ignora el límite y se desplaza más allá del pie de página. Parece que funciona una vez cuando borra la caché o actualiza la página, y luego no para cada vista repetida. ¿Algunas ideas? Aquí hay un ejemplo en el sitio http://thecomeupbmx.net/videos/red-bull-empire-of-dirt-practice-edit/ (no es mío, solo trabajo en él) –

+0

Necesitaría algún tipo de de caso de prueba para esto que siempre falla. Puede ser que los navegadores guarden en la memoria caché los js antiguos, pero no puedo reproducir esto. – 19greg96

+0

Este plugin jQuery https://github.com/AndrewHenderson/jSticky (lo vi en uno de los comentarios del ejemplo anterior proporcionado por Mike Jonas) hizo exactamente lo que estaba buscando. Es compatible con un valor de tope (puede ser una clase, ID o incluso un valor numérico) para detener el cuadro adhesivo en cualquier posición deseada. – julianm

Cuestiones relacionadas