JavaScript jQuery: Beim scrollen der Sidebar nach unten, zittert diese beim positionnieren

3Tbles

Cadet 4th Year
Registriert
Jan. 2007
Beiträge
79
Hallo,

Sorry für den Titel, irgendwie fällt mir nichts anderes ein.

Also, es geht darum, dass ich die Sidebar der Seite beim Scrollen fix wird, wenn man das Ende der Sidebar erreicht hat. Scrollt man bis zum Ende der Seite und das untere Ende der Sidebar berührt den Footer, setze ich einen festen Abstand für die Sidebar von unten, damit diese eben nicht über den Footer läuft. Es funktioniert alles soweit, nur wenn die Sidebar den Footer erreicht, zittert diese total, was unschön aussieht. Ab und zu läuft die sogar über den Footer drüber, was mir nicht ganz verständlich ist.

Ich weiß, die Bezeichner sind nicht gerade mega aussagekräftig, aber ich bin gerade noch in der Ausprobierphase. Wenn alles steht und funktioniert, mach ich alles schöner.


Code:
$(document).scroll(function() {
        var scrollPosition = $(document).scrollTop();
	var supplementaryHeight = $('#supMeta').offset().top - $(window).scrollTop(); 
       <!-- supMeta ist ein leerer div am Ende der Sidebar, dient zur Bestimmung des Bottom Punktes der Sidebar-->
	var footerTopPos = $('#footer').position().top;
        var supplementaryBottom = scrollPosition + supplementaryHeight; 
	var abstandUnten = $(document).height() - footerTopPos + 5;
   
    if (scrollPosition >= supplementaryHeight) {
            $('.meta').addClass('fixed');
            <!-- .meta ist die Sidebar selbst--->

                if (footerTopPos <= supplementaryBottom){
			 $('.fixed').css('bottom', abstandUnten + 'px');	
                }else{
                        $('.fixed').css('bottom', '5px');
              }

        } else {
            $(".meta").removeClass('fixed');
        };

    });

Weiß jemand, woran es liegen könnte, dass es zittert und manchmal nicht sehr gut funktioniert?
Danke!!
Ergänzung ()

Nachtrag: setze ich den Wert 1050 px für supplementaryHeight, so funktioniert alles einwandfrei. Das Problem ist dabei, wenn man die Seite verkleinert, oder wahrscheinlich jemand eine andere Auflösung hat etc. funktioniert es nicht mehr so gut, also eben nicht dynamisch.
 
Nur als kurzer Einwand: In Twitter Bootstrap gibts eine Affix Möglichkeit. Die genau das erfüllt was du gerne hättest. Schon fertig implementiert und funktioniert wunderbar.
 
Ich muss sagen, ich bin erst in meinen Anfängen von JavaScript und jQuery, möchte es aber lernen, somit versuche ich gerade alle Funktionen selber zu schreiben, um auch die Sprache zu erlernen. Gerade bei dem o.g. Code komme ich nicht weiter, weil in meinem Kopf müsste es eigentlich perfekt funktionieren.
 
Zurück
Oben