Puoi impostare il tuo href #!invece di#
Per esempio,
<a href="#!">Link</a>
non farà alcuno scorrimento quando si fa clic.
Attenzione! Ciò aggiungerà comunque una voce alla cronologia del browser quando si fa clic, il che significa che dopo aver fatto clic sul collegamento, il pulsante Indietro dell'utente non li porterà alla pagina in cui si trovavano in precedenza. Per questo motivo, probabilmente è meglio usare l' .preventDefault()approccio o usarli entrambi in combinazione.
Ecco un Fiddle che illustra questo (basta scorrere il browser verso il basso fino a ottenere una barra di scorrimento):
http://jsfiddle.net/9dEG7/
Per i nerd spec - perché funziona:
Questo comportamento è specificato nelle specifiche HTML5 nella sezione Navigazione verso un identificatore di frammento . Il motivo per cui un collegamento con un href di "#"fa scorrere il documento verso l'alto è che questo comportamento è esplicitamente specificato come il modo di gestire un identificatore di frammento vuoto:
2. Se fragidè la stringa vuota, la parte indicata del documento è la parte superiore del documento
L'uso di un href "#!"invece funziona semplicemente perché evita questa regola. Non c'è nulla di magico nel punto esclamativo: crea semplicemente un comodo identificatore di frammento perché è notevolmente diverso da un tipico frammento e è improbabile che corrisponda mai all'elemento ido namedi un elemento nella tua pagina. In effetti, potremmo mettere praticamente qualsiasi cosa dopo l'hash; gli unici frammenti che non saranno sufficienti sono la stringa vuota, la parola "in alto" o le stringhe che corrispondono nameo gli idattributi degli elementi nella pagina.
Più precisamente, abbiamo solo bisogno di un identificatore di frammento che ci farà passare al punto 8 del seguente algoritmo per determinare la parte indicata del documento dal fragido:
Applicare l'algoritmo del parser URL all'URL e lasciare che fragid sia il componente frammento dell'URL analizzato risultante.
Se fragidè la stringa vuota, la parte indicata del documento è la parte superiore del documento; ferma l'algoritmo qui.
Lascia che fragid bytessia il risultato della decodifica percentuale fragid.
Lascia che decoded fragidsia il risultato dell'applicazione dell'algoritmo del decodificatore UTF-8 a fragid bytes. Se il decodificatore UTF-8 emette un errore del decodificatore, interrompere il decodificatore e saltare invece al passaggio etichettato no decoded fragid.
Se nel DOM è presente un elemento con un ID esattamente uguale a decoded fragid, quindi il primo di tali elementi nell'ordine dell'albero è la parte indicata del documento; ferma l'algoritmo qui.
Nessun frammento decodificato : se nel DOM è presente un elemento con un attributo name il cui valore è esattamente uguale a fragid( nondecoded fragid ), il primo di tali elementi nell'ordine dell'albero è la parte indicata del documento; ferma l'algoritmo qui.
Se fragid è una corrispondenza ASCII senza distinzione tra maiuscole e minuscole per la stringa top, la parte indicata del documento è la parte superiore del documento; ferma l'algoritmo qui.
Altrimenti, non esiste una parte indicata del documento.
Fintanto che si preme il passaggio 8 e non viene indicata alcuna parte del documento , entra in gioco la seguente regola:
Se non è presente alcuna parte indicata ... l'agente utente non deve fare nulla.
ecco perché il browser non scorre.