Sie können Ihre href auf #!
anstatt einstellen#
Beispielsweise,
<a href="#!">Link</a>
führt beim Klicken kein Scrollen durch.
In acht nehmen! Dadurch wird beim Klicken weiterhin ein Eintrag zum Browserverlauf hinzugefügt. Dies bedeutet, dass die Schaltfläche "Zurück" des Benutzers nach dem Klicken auf Ihren Link nicht zu der Seite führt, auf der er zuvor war. Aus diesem Grund ist es wahrscheinlich besser, den .preventDefault()
Ansatz zu verwenden oder beide in Kombination zu verwenden.
Hier ist eine Geige, die dies veranschaulicht (schieben Sie einfach Ihren Browser nach unten, bis Sie eine Bildlaufleiste erhalten):
http://jsfiddle.net/9dEG7/
Für die Spec-Nerds - warum das funktioniert:
Dieses Verhalten wird in der HTML5-Spezifikation im Abschnitt Navigieren zu einer Fragmentkennung angegeben . Der Grund dafür, dass ein Link mit einer href von "#"
das Dokument nach oben scrollt, besteht darin, dass dieses Verhalten explizit als Methode zur Behandlung einer leeren Fragmentkennung angegeben wird:
2. Wenn fragid
es sich um die leere Zeichenfolge handelt, befindet sich der angegebene Teil des Dokuments oben im Dokument
Die Verwendung eines href von "#!"
funktioniert stattdessen einfach, weil diese Regel vermieden wird. Das Ausrufezeichen ist nichts Magisches - es ist nur eine bequeme Fragmentkennung, da es sich deutlich von einem typischen Fragid unterscheidet und wahrscheinlich nie mit dem id
oder name
eines Elements auf Ihrer Seite übereinstimmt . In der Tat könnten wir fast alles nach dem Hash setzen; Die einzigen Fragmente, die nicht ausreichen, sind die leere Zeichenfolge, das Wort "oben" oder Zeichenfolgen, die übereinstimmen name
oder id
Attribute von Elementen auf der Seite.
Genauer gesagt benötigen wir nur eine Fragmentkennung, die dazu führt, dass wir Schritt 8 im folgenden Algorithmus durchlaufen, um den angegebenen Teil des Dokuments aus dem Fragid zu bestimmen:
Wenden Sie den URL-Parser-Algorithmus auf die URL an und lassen Sie fragid die Fragmentkomponente der resultierenden analysierten URL sein.
Wenn fragid
es sich um die leere Zeichenfolge handelt, befindet sich der angegebene Teil des Dokuments oben im Dokument. Stoppen Sie den Algorithmus hier.
Sei fragid bytes
das Ergebnis der prozentualen Dekodierung fragid
.
Sei decoded fragid
das Ergebnis der Anwendung des UTF-8-Decoder-Algorithmus auf fragid bytes
. Wenn der UTF-8-Decoder einen Decoderfehler ausgibt, brechen Sie den Decoder ab und springen Sie stattdessen zu dem mit beschrifteten Schritt no decoded fragid
.
Wenn sich im DOM ein Element befindet, dessen ID genau gleich ist decoded fragid
, ist das erste derartige Element in Baumreihenfolge der angegebene Teil des Dokuments. Stoppen Sie den Algorithmus hier.
Kein dekodierter Fragid : Wenn das DOM ein Element mit einem Namensattribut enthält , dessen Wert genau gleich fragid
( nichtdecoded fragid
) ist, ist das erste derartige Element in Baumreihenfolge der angegebene Teil des Dokuments. Stoppen Sie den Algorithmus hier.
Wenn fragid eine Übereinstimmung zwischen ASCII-Groß- und Kleinschreibung für die Zeichenfolge nicht berücksichtigt, befindet sich top
der angegebene Teil des Dokuments oben im Dokument. Stoppen Sie den Algorithmus hier.
Andernfalls ist kein Teil des Dokuments angegeben.
Solange wir Schritt 8 drücken und kein Teil des Dokuments angegeben ist , kommt die folgende Regel ins Spiel:
Wenn kein Teil angegeben ist ... darf der Benutzeragent nichts tun.
Aus diesem Grund scrollt der Browser nicht.