2009-05-07 23 views
90

Sto provando a scorrere verso il basso di 100 px ogni volta che l'utente si avvicina alla parte superiore del documento.

Ho la funzione in esecuzione quando l'utente si avvicina alla parte superiore del documento, ma la funzione .scrollTo non funziona.

ho messo un avviso dopo e prima di controllare per vedere se effettivamente era la linea o no che stava fermando e solo la prima segnalazione si spegne, ecco il codice:

alert("starting"); 
$.scrollTo({ top: '+=100px', left: '+=0px' }, 800); 
alert("finished"); 

so di avere la pagina jquery è stata collegata correttamente perché sto usando molte altre funzioni jQuery e funzionano tutte bene. Ho anche provato a rimuovere il "px" dall'alto e non sembra fare la differenza.

+3

Jquery funziona correttamente, ma sei sicuro di avere il plugin scrollTo collegato correttamente? Modifica uno di questi avvisi per avvisare ($. ScrollTo); – Andrew

risposta

93

Se non funziona perché non provare a utilizzare il metodo scrollTop di jQuery?

$("#id").scrollTop($("#id").scrollTop() + 100); 

Se stai cercando di scorrere senza intoppi è possibile utilizzare di base JavaScript setTimeout/setInterval funzione per rendere scorrevole in incrementi di 1px su una lunghezza di tempo.

+3

ScrollTop funziona molto più agevolmente anche in IE. –

+6

Nota se vuoi scorrere l'intera pagina e non i singoli elementi, usa $ ('html, body') proprio come [Tim] (http://stackoverflow.com/users/181971) ha indicato qui. Solo $ ('body') non funzionerà con tutti i browser. –

7

Sembra che tu abbia la sintassi leggermente errata ... Sto assumendo in base al tuo codice che stai provando a scorrere verso il basso 100px in 800ms, in questo caso funziona (usando scrollTo 1.4.1):

$.scrollTo('+=100px', 800, { axis:'y' }); 
40

jQuery ora supporta scrollTop come variabile di animazione.

$("#id").animate({"scrollTop": $("#id").scrollTop() + 100}); 

Non è più necessario impostare Timeout/setInterval per scorrere senza problemi.

+0

Trovato alcuni errori di sintassi: manca il tuo closing {. Altrimenti questo è un buon punto. – Joshua

+1

Dovrebbe essere '$ (" # id "). Offset(). Top' invece? – codeulike

302
$('html, body').animate({scrollTop: $("#page").offset().top}, 2000); 
+4

+1 per questo, molto liscia. – shmeeps

+0

Davvero fantastico - grazie! –

+18

Mi sono chiesto spesso perché la gente usa 'html, body' per scrollTop invece di solo 'html'. Qualche idea su questo? –

6

In realtà qualcosa di simile

function scrollTo(prop){ 
    $('html,body').animate({scrollTop: $("#"+prop).offset().top + 
parseInt($("#"+prop).css('padding-top'),10) },'slow'); 
} 

funzionerà bene e il supporto imbottitura. È inoltre possibile sostenere i margini facilmente - per il completamento vedi sotto

function scrollTo(prop){ 
    $('html,body').animate({scrollTop: $("#"+prop).offset().top 
+ parseInt($("#"+prop).css('padding-top'),10) 
+ parseInt($("#"+prop).css('margin-top'),10) +},'slow'); 
} 
12

per aggirare il problema html vs body, ho fissato questo non animando il css direttamente, ma piuttosto chiamare window.scrollTo(); su ogni passo:

$({myScrollTop:window.pageYOffset}).animate({myScrollTop:300}, { 
    duration: 600, 
    easing: 'swing', 
    step: function(val) { 
    window.scrollTo(0, val); 
    } 
}); 

Funziona bene senza alcun aggiornamento, poiché utilizza JavaScript cross-browser.

Dai un'occhiata a http://james.padolsey.com/javascript/fun-with-jquerys-animate/ per ulteriori informazioni su cosa puoi fare con la funzione animate di jQuery.

+1

Questo è geniale. Ho solo cambiato 'window.pageYOffset' in' $ (window) .scrollTop() 'e' window.scrollTo (0, val) 'in' $ (window) .scrollTop (val) 'quindi non devo preoccuparmi sulla compatibilità del browser. – leftclickben

+1

Non ho mai pensato di passare un oggetto al metodo animato di jQuery in quel modo. Tanti possibili usi. Questa soluzione è grandiosa, grazie. – Synexis

+0

Questo ha seriamente bisogno di più upvotes, è fantastico. – degenerate

Problemi correlati