2012-05-19 4 views
6

Ich möchte es bekommen, so dass das letzte div auf meiner Seitenleiste klebrig bleibt, wenn die Seite scrollt, aber an der Fußzeile stoppt. Ich habe es fast mit einem online tutorial arbeiten, aber die Berechnung durcheinander bringt, wenn Kommentare geladen werden und es nur zu einem bestimmten Punkt geht.Stoppen Sie schwimmende klebrige Seitenleiste div am Footer (fast funktioniert)

Hier ist eine funktionierende Version http://jsfiddle.net/k56yR/1/, aber gibt es eine einfache Möglichkeit, etwas wie die Fußzeilenhöhe zu berechnen und dann sagen, damit aufhören zu scrollen, dass weit vom unteren Rand der Seite?

Antwort

14

Ich denke, Ihr Problem ist, dass Ihr $('#footer').offset().top Wert nach dem Laden Ihrer Kommentare ändert. Sie müssen also footerTop (und limit basierend auf dem neuen Wert footerTop) aktualisieren, nachdem Ihre Kommentare geladen wurden oder jedes Mal, wenn Ihr Ereignis ausgelöst wird.

so etwas wie:

$(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}); 
      } 
     }); 
    } 
}); 

Wie bei den meisten Fällen gibt es eine jQuery-Plugin für diese, wie julianm in seinem Kommentar, here verfügbar hingewiesen. Es unterstützt auch einen Stopper-Wert, um die klebrige Box an jeder gewünschten Position zu stoppen.

+0

Danke, es funktioniert fast jetzt. Dachte es war, aber mit verschiedenen Browsern ignoriert es das Limit und scrollt über die Fußzeile. Scheint einmal zu funktionieren, wenn Sie entweder den Cache löschen oder die Seite aktualisieren, dann nicht für jede Wiederholungsansicht. Irgendwelche Ideen? Hier ist ein Beispiel auf der Website http://thecomeupbmx.net/videos/red-bull-empire-of-dirt-practice-edit/ (es ist nicht meins, ich arbeite nur daran) –

+0

Ich würde eine Art brauchen Testfall dafür, der immer versagt. Es kann sein, dass die Browser die alten js cachen, aber ich kann das nicht reproduzieren. – 19greg96

+0

Dieses jQuery-Plugin https://github.com/AndrewHenderson/jSticky (Ich sah es in einem der Kommentare des vorherigen Beispiels von Mike Jonas) tat genau das, was ich suchte. Es unterstützt einen Stopper-Wert (kann eine Klasse, ID oder sogar ein numerischer Wert sein), um das klebrige Kästchen an jeder gewünschten Position anzuhalten. – julianm