2012-10-17 10 views
5

Ich arbeitete gerade mit jQuery prepend und konnte es nicht wie erwartet funktionieren.jQuery Prepend - Auto-Scroll zu verhindern

Was ich tue:

ein vorangestelltes .content div zu #main div jede Sekunde

Aber, wenn ich ein wenig nach unten scrollen [sobald die Seite ist voll von Inhalt] Ich werde immer wieder zu #main zurückgescrollt. .content

Wie? Ich tue:

verhindern, dass die viewport ändert - wie im Falle von append

fiddle

+1

Der Blick nicht ändert; Die Seite wird länger, sodass die Bildlauflänge von oben statisch ist, während die gesamte Seitenlänge dynamisch größer wird (die unteren Elemente gehen also über das Ansichtsfenster hinaus). Versuchen Sie es so zu machen, wenn Sie bis zum Ende der Seite scrollen, bleibt das letzte Element in der Ansicht, anstatt "runterzufallen"? –

+0

@BradChristie Ich möchte grundsätzlich 'was ist sichtbar' [mit Ausnahme der Bildlaufleiste, die sich natürlich ändern sollte], um überhaupt nicht zu ändern, unabhängig von Vorstufen. – Prasanth

Antwort

13

Verwandte Wie ich in einem Kommentar erklärt, wird die Schriftrolle nicht wirklich zu ändern. Die Scrollfunktion des Fensters basiert auf "distance from top" (DfT). Das heißt, wenn Sie keine Bildlaufleiste haben, sind Sie DfT 0. Sobald Sie die Bildlaufleisten eingeführt haben, haben Sie jetzt eine Distanz zum Arbeiten.

Da der Inhalt länger wird, ist das Ansichtsfenster nur so viele Pixel hoch, dass einige Inhalte am unteren Rand der Seite "fallen" (prepend macht die DfT um die Höhe Ihres neuen Elements ab).

Der beste Weg, den ich mir vorstellen kann, ist, es mit der Höhe des neuen Elements zu kontern. Dadurch können Sie zu einer Position blättern. Wenn Sie neue Elemente hinzufügen, ändern Sie die Bildlaufposition entsprechend.

Hier ist ein Beispiel dafür, was ich meine: http://jsfiddle.net/bradchristie/66RvC/1/

Und der Code (als Referenz):

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

Und append hat nichts mit DfT zu tun und ich hatte kein Problem. Recht? – Prasanth

+0

@Goldenparrot: Nicht, dass es keine Relevanz hat, es ist nur, dass Append nicht viele Elemente nach unten verschiebt. Wenn Sie jedoch zwei Listen auf einer Seite haben und Elemente an die oberste Liste anhängen, würden sich die Elemente der zweiten Liste verschieben und Sie hätten das gleiche Problem. –

+1

@Goldenparrot: Ein Beispiel von dem, was ich meine [hier] (http://jsfiddle.net/bradchristie/66RvC/3/) (mit append anstelle von prepend). Beachten Sie, dass es jetzt wichtig ist, wenn der Inhalt danach ist. –