Cambiare la funzione a questo:
var page = $("html, body");
$("section").click(function(e) {
page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove", function(){
page.stop();
});
page.animate({ scrollTop: $(this).position().top }, 'slow', function(){
page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove");
});
return false;
});
Questo sarà:
- interrompere l'animazione, se l'utente scorre manualmente (solo durante l'animazione)
- non ostruisce il vostro normale animazione jQuery, ad esempio alcune delle altre risposte sarebbero
Alcune informazioni in più:
Perché vincolanti per tutti quegli eventi? "scroll mousewheel etc ..."
Esistono molti tipi diversi di eventi di scorrimento. Puoi scorrere verso il basso usando il tuo mouse, tastiera, touchscreen, ecc. Con questo ci assicuriamo di prendere lo di tutti gli di questi.
A cosa serve var page = $("html, body");
? Non posso semplicemente usare $("html, body")
ovunque?
Se si utilizza lo stesso selettore più di una volta, è consigliabile memorizzarli nella cache in un variable. Sarà più facile da scrivere/utilizzare e offre prestazioni migliori rispetto al fatto che il programma ricalcoli il selettore ogni volta.
Dove posso trovare ulteriori informazioni su .animate()
e .stop()
?
È possibile leggere la documentazione di jQuery per .animate() e .stop(). Raccomando anche di leggere su animation queue's dal .stop()
funziona su questo principio.
fonte
2013-08-26 13:43:41
grazie, funziona perfettamente. Solo una domanda, voglio ignorare i clic sugli elementi in modo che non influiscano sui collegamenti ipertestuali, ho provato "section: not (a)" nel selettore ma non funziona. Potresti modificare il selettore in modo che ignori i collegamenti? – lisovaccaro
Questo dovrebbe aiutare: http://stackoverflow.com/questions/2457246/jquery-click-function-exclude-children –
Ho scoperto che dovevo rimuovere "scroll" e "keyup" da ciò che era legato, perché il '.stop()' si stava attivando quando inizialmente si cliccava su '$ ('section')' (usando questo esempio) – Crimbo