2012-10-17 15 views
5

Pracowałem tylko z jQuery prepend i nie mogłem go uruchomić zgodnie z oczekiwaniami.jQuery prepend - zapobiega automatycznemu przewijaniu

Co robię:

ich znakiem .content div #main div co sekundę

Ale kiedy przewinąć kawałek [gdy strona jest pełna treść] , Nadal jestem przewijany z powrotem do #main 's góry lub najnowsze przedimplementowane .content

Jak zrobić I:

zapobiec viewport od zmieniających się - podobnie jak w przypadku append

Podobne fiddle

+1

Widok nie ulega zmianie; strona staje się dłuższa, więc odległość przewijania od góry jest statyczna, podczas gdy całkowita długość strony staje się dynamicznie większa (tak więc dolne elementy wykraczają poza obszar wyświetlania). Czy próbujesz to zrobić, jeśli przewiniesz całą drogę na dół strony, pozostanie ostatni element, zamiast "spadać"? –

+0

@BradChristie Zasadniczo chcę, aby "co visibile" [z wyjątkiem paska przewijania, który oczywiście powinien się zmienić], aby się nie zmieniało w ogóle, niezależnie od poprzedzających. – Prasanth

Odpowiedz

13

Jak wyjaśniono w komentarzu, zwój nie rzeczywiście się zmienia. Przewijanie okna opiera się na "odległości od góry" (DfT). Oznacza to, że jeśli nie masz paska przewijania, jesteś DfT równy 0. Po wprowadzeniu pasków przewijania masz teraz do dyspozycji odpowiednią odległość.

Ponieważ zawartość jest coraz większa, w oknie roboczym znajduje się tylko tyle pikseli, że niektóre treści "spadają" na dole strony (przedrostek powoduje wyłączenie DfT według wysokości nowego elementu).

Najlepszym sposobem, jaki mogę wymyślić, jest zrównanie go z wysokością nowego elementu. Pozwala to na przewijanie do pozycji, a po dodaniu nowych elementów odpowiednio modyfikujesz pozycję przewijania.

Oto przykład tego, co mam na myśli: http://jsfiddle.net/bradchristie/66RvC/1/

I kod (dla porównania):

var f = function(){ 
    var t = $(window).scrollTop(),  // Window's current scroll position 
     $d = $(d()).prependTo('#main'), // store the new element 
     h = $d.outerHeight();   // also get its height 
    if (t){        // Only adjust if they've scrolled 
     $(window).scrollTop(t + h);  // add the delta to the scroll position 
    } 
    setTimeout(f, 1000); 
}; 
+0

A dodatek nie ma nic wspólnego z DfT i nie miałem żadnego problemu. Dobrze? – Prasanth

+0

@goldenparrot: Nie to, że nie ma to żadnego znaczenia, to tylko to, że dodatek nie przesuwa wielu elementów w dół. Jeśli jednak masz dwie listy na stronie i nadal dodajesz elementy do listy na górze, elementy drugiej listy przesuwają się i masz ten sam problem. –

+1

@goldenparrot: Przykład tego co mam na myśli [tutaj] (http://jsfiddle.net/bradchristie/66RvC/3/) (użycie append zamiast z góry). Zauważ, że teraz ma to znaczenie z zawartością po nim. –

Powiązane problemy