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);
};
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ć"? –
@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