2012-10-17 7 views
5

Stavo solo lavorando con jQuery prepend e non riuscivo a farlo funzionare come previsto.jQuery anteporre - impedire lo scorrimento automatico

Quello che sto facendo:

Anteporre un .content div per #main div ogni secondo

Ma, quando ho scorrere verso il basso un po '[una volta che la pagina è piena di contenuti] , Continuo a scorrere di nuovo a #main's top o latest ante .content

Come faccio:

Impedire l'viewport di cambiare - come nel caso di accodamento

correlati fiddle

+1

La vista non cambia; la pagina si allunga in modo che la distanza di scorrimento dall'alto sia statica mentre la lunghezza intera della pagina diventa dinamicamente più grande (quindi gli elementi in basso vanno oltre il viewport). Stai cercando di farlo in modo che se scorri fino alla fine della pagina l'ultimo elemento rimanga in vista invece di "cadere"? –

+0

@BradChristie Fondamentalmente voglio 'ciò che è visibile' [ad eccezione della barra di scorrimento, che ovviamente dovrebbe cambiare] per non cambiare affatto a prescindere dalle prepazioni. – Prasanth

risposta

13

Come ho spiegato in un commento, il rotolo non è effettivamente cambiando. Lo scroll della finestra si basa su "distance from top" (DfT). Vale a dire che se non hai una barra di scorrimento, sei DfT è 0. Una volta che le barre di scorrimento sono state introdotte, ora hai una distanza con cui lavorare.

Poiché il contenuto si allunga, il viewport è alto solo di alcuni pixel, alcuni contenuti "cadono" dalla parte inferiore della pagina (anteporre il DfT all'altezza del nuovo elemento).

Il modo migliore a cui posso pensare è quello di contrastarlo con l'altezza del nuovo elemento. Ciò consente di scorrere fino a una posizione, quindi, quando vengono aggiunti nuovi elementi, si modifica la posizione di scorrimento di conseguenza.

Ecco un esempio di ciò che intendo: http://jsfiddle.net/bradchristie/66RvC/1/

E il codice (per riferimento):

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

E, append non ha nulla a che fare con DfT e non ho avuto alcun problema. Destra? – Prasanth

+0

@goldenparrot: Non che non abbia rilevanza, è solo che append non sposta molti elementi verso il basso. Tuttavia, se avessi due elenchi su una pagina e avessi aggiunto gli elementi in cima all'elenco, gli elementi del secondo elenco si sarebbero spostati e avresti avuto lo stesso problema. –

+1

@goldenparrot: un esempio di cosa intendo [qui] (http://jsfiddle.net/bradchristie/66RvC/3/) (utilizzando append anziché anteporre). Si noti che ora conta con il contenuto dopo. –