Ich möchte den Browser dazu bringen, die Seite mit JavaScript zu einem bestimmten Anker zu scrollen.
Ich habe in meinem HTML-Code ein name
oder id
Attribut angegeben :
<a name="anchorName">..</a>
oder
<h1 id="anchorName2">..</h1>
Ich möchte den gleichen Effekt erzielen, den Sie durch Navigieren erzielen würden http://server.com/path#anchorName
. Die Seite sollte so gescrollt werden, dass sich der Anker oben im sichtbaren Teil der Seite befindet.
<a href="#anchorName">link</a>
function scrollToHash(hashName) { location.hash = "#" + hashName; }
Viel einfacher:
quelle
scrollIntoViewOptions
, für den einebehavior: "smooth"
Option verfügbar ist, der derzeit jedoch nur mit Firefox kompatibel ist.Sie können jQuerys .animate () , .offset () und verwenden
scrollTop
. MögenBeispiellink: http://jsbin.com/unasi3/edit
Wenn Sie nicht animieren möchten, verwenden Sie .scrollTop () wie
oder Javascripts native
location.hash
wiequelle
<h1 id="anchorName">
oder ein zu finden<a name="anchorName">
, verwenden Sie$('#'+hash+',a[name='+hash+']')
oder wählen Sie leicht optimiert$(document.getElementById(hash) || 'a[name='+hash+']')
, um das Element zuerst anhand der ID zu suchen, und greifen Sie nur dann auf die Suche nach dem a zurück, wenn eines nicht gefunden wird.$("#selector")
ist optimiert,$("#selector,a[name='selector']")
wird aber nicht so schnell dieselben Optimierungen durchlaufen. Ich nehme an, mein 2,5 Jahre alter Kommentar klingt etwas seltsam. Die "Optimierung" vermeidet diea[name='selector']
Suche, wenn sie die ID findet, und optimiert nicht die Suche nach der ID.Tolle Lösung von jAndy, aber die glatte Schriftrolle scheint Probleme mit Firefox zu haben.
Das Schreiben auf diese Weise funktioniert auch in Firefox.
quelle
2018-2020 Pure js:
Es gibt eine sehr bequeme Möglichkeit, zum Element zu scrollen:
Aber soweit ich weiß, hat er keine so gute Unterstützung wie die folgenden Optionen.
Erfahren Sie mehr über die Methode.
Wenn es notwendig ist, dass sich das Element oben befindet:
Demonstrationsbeispiel für Codepen
Wenn Sie möchten, dass sich das Element in der Mitte befindet:
Demonstrationsbeispiel für Codepen
Unterstützung:
Sie schreiben, dass dies
scroll
die gleiche Methode ist wiescrollTo
, aber die Unterstützung zeigt sich besser inscrollTo
.Mehr zur Methode
quelle
Eine reine Javascript-Lösung ohne JQuery. Getestet auf Chrome & Ie, nicht getestet auf IOS
Demo: https://jsfiddle.net/jd7q25hg/12/
quelle
Im Jahr 2018 benötigen Sie jQuery für so etwas Einfaches nicht. Die integrierte
scrollIntoView()
Methode unterstützt eine "behavior
" -Eigenschaft, mit der Sie problemlos zu einem beliebigen Element auf der Seite scrollen können. Sie können die Browser-URL sogar mit einem Hash aktualisieren, um sie als Lesezeichen zu speichern.In diesem Tutorial zum Scrollen von HTML-Lesezeichen finden Sie eine native Methode, um allen Ankerlinks auf Ihrer Seite automatisch einen reibungslosen Bildlauf hinzuzufügen:
quelle
Scrollen Sie sanft zur richtigen Position (2019)
Holen Sie sich die richtige
y
Koordinate und verwendenwindow.scrollTo({top: y, behavior: 'smooth'})
Mit Versatz
scrollIntoView
ist auch eine gute Option, funktioniert aber in einigen Fällen möglicherweise nicht perfekt. Zum Beispiel, wenn Sie zusätzlichen Versatz benötigen . Mit müssenscrollTo
Sie nur diesen Offset wie folgt hinzufügen:quelle
css html { scroll-behavior: smooth; }
quelle
Die Lösung von CSS-Tricks funktioniert in jQuery 2.2.0 nicht mehr. Es wird ein Auswahlfehler ausgegeben:
Ich habe es durch Ändern des Selektors behoben. Das vollständige Snippet lautet:
quelle
Die meisten Antworten sind unnötig kompliziert.
Wenn Sie nur zum Zielelement springen möchten, benötigen Sie kein JavaScript:
Wenn Sie animiert zum Ziel scrollen möchten, lesen Sie bitte die Antwort von @ Shahil.
quelle
Das funktioniert:
https://jsfiddle.net/68pnkfgd/
Fügen Sie einfach die Klasse 'scroll' zu allen Links hinzu, die Sie animieren möchten
quelle
Dies ist ein funktionierendes Skript, mit dem die Seite zum Anker gescrollt wird. Zum Einrichten geben Sie dem Ankerlink einfach eine ID, die dem Namensattribut des Ankers entspricht, zu dem Sie einen Bildlauf durchführen möchten.
quelle
Ich weiß, dass diese Frage wirklich alt ist, aber ich habe in CSS-Tricks eine einfache und einfache jQuery-Lösung gefunden . Das ist der, den ich jetzt benutze.
quelle
quelle
eine vue2-Lösung ... fügen Sie eine einfache Dateneigenschaft hinzu, um die Aktualisierung einfach zu erzwingen
quelle