Ecco un esempio di lavoro: http://jsfiddle.net/YWnzc/7/
E il codice (abbastanza simile a Rizzle di, con un paio di modifiche che vi spiegherò):
$('a').hover(function(){
var selector = $(this).data('section');
var scrollAmount = $(selector).offset().top + $('#wrapper')[0].scrollTop - 129;
$('#wrapper').animate({scrollTop: scrollAmount}, 250);
},function(){
$('#wrapper').animate({scrollTop: 0}, 250);
});
Primo, var selector = $(this).data('section');
bec ause in jsFiddle, l'attributo href stava restituendo il percorso completo della pagina + l'hash. Quindi l'ho modificato in un attributo di dati html5 (data-section
).
La riga successiva è simile a rizzle, tranne che prendiamo l'offset della sezione e lo aggiungiamo all'attuale valore scrollTop
dello #wrapper
. Come ha sottolineato, ci sono alcuni strani problemi di offset in corso, e ho scoperto che la sottrazione di 129 ha fatto il trucco. Mentre questo numero 129 potrebbe sembrare qualcosa che potrebbe rompersi, ho provato a cambiare le dimensioni delle sezioni, rendendole non uguali, ecc., E ha continuato a funzionare. Sto usando Chrome, e forse un browser non webkit avrebbe bisogno di una costante diversa da sottrarre. Ma sembra che quel numero 129 sia almeno un qualche tipo di costante.
Il resto dovrebbe essere abbastanza auto-esplicativo.
Una cosa da notare: come si sposta il cursore sopra le <a>
tag, il contenuto del #wrapper
div sembrerà a saltare in giro, ma questo è solo perché la parte mouseLeave dell'evento hover brevemente viene attivato durante il movimento del cursore. Sono sicuro che lo puoi risolvere :)
Attenzione che la maggior parte dei browser Android e iOS meno recenti non supportano lo scorrimento di DIV – rizzle