Ich habe dieses input
Element:
<input type="text" class="textfield" value="" id="subject" name="subject">
Dann habe ich einige andere Elemente, wie andere Texteingaben, Textbereiche usw.
Wenn der Benutzer klickt auf dem input
mit #subject
, sollte die Seite auf das letzte Element der Seite scrollen mit einer netten Animation. Es sollte eine Schriftrolle nach unten und nicht nach oben sein.
Das letzte Element der Seite ist eine submit
Schaltfläche mit #submit
:
<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">
Die Animation sollte nicht zu schnell und flüssig sein.
Ich verwende die neueste jQuery-Version. Ich bevorzuge es, kein Plugin zu installieren, sondern die Standardfunktionen von jQuery zu verwenden, um dies zu erreichen.
javascript
jquery
scroll
DiegoP.
quelle
quelle
scrollTo
wurde für mich wegen eines Chrome-Plugins deaktiviert, nicht sicher welches.Antworten:
Angenommen, Sie haben eine Schaltfläche mit der ID
button
, versuchen Sie dieses Beispiel:Ich habe den Code aus dem Artikel erhalten. Scrollen Sie reibungslos zu einem Element ohne ein jQuery-Plugin . Und ich habe es am folgenden Beispiel getestet.
quelle
.scrollTop(…)
stattdessen.animate({scrollTop: …}, …)
.jQuery .scrollTo (): Ansicht - Demo, API, Quelle
Ich habe dieses leichte Plugin geschrieben, um das Scrollen von Seiten / Elementen zu vereinfachen. Es ist flexibel, wo Sie ein Zielelement oder einen bestimmten Wert übergeben können. Vielleicht könnte dies Teil der nächsten offiziellen Veröffentlichung von jQuery sein. Was denkst du?
Beispiele Verwendung:
Optionen:
scrollTarget : Ein Element, eine Zeichenfolge oder eine Zahl, die die gewünschte Bildlaufposition angibt.
offsetTop : Eine Zahl, die den zusätzlichen Abstand über dem Bildlaufziel definiert.
Dauer : Eine Zeichenfolge oder Zahl, die bestimmt, wie lange die Animation ausgeführt wird.
Beschleunigung : Eine Zeichenfolge, die angibt, welche Beschleunigungsfunktion für den Übergang verwendet werden soll.
complete : Eine Funktion, die aufgerufen werden kann, sobald die Animation abgeschlossen ist.
quelle
Wenn Sie nicht sehr an dem Effekt des glatten Bildlaufs interessiert sind und nur an einem Bildlauf zu einem bestimmten Element interessiert sind, benötigen Sie hierfür keine jQuery-Funktion. Javascript hat Ihren Fall abgedeckt:
https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView
Alles was Sie tun müssen ist:
$("selector").get(0).scrollIntoView();
.get(0)
wird verwendet, weil wir das DOM-Element von JavaScript und nicht das DOM-Element von JQuery abrufen möchten.quelle
$(selector)[0]
?document.getElementById('#elementID').scrollIntoView()
. Es macht keinen Sinn, eine ~ 100k-Bibliothek zu laden, nur um ein Element auszuwählen und es dann in reguläres JavaScript zu konvertieren.document.getElementById('elementID').scrollIntoView()
Verwenden dieses einfachen Skripts
Würde in der Art machen, dass, wenn ein Hash-Tag in der URL gefunden wird, der scrollTo zur ID animiert. Wenn kein Hash-Tag gefunden wurde, ignorieren Sie das Skript.
quelle
$(window.location.hash)
funktioniert nicht für Hashes, die die Regex-ID-Erkennung von jQuery nicht erfüllen. Zum Beispiel Hashes, die Zahlen enthalten. Es ist auch ein bisschen gefährlich; Das Format der Eingabe sollte überprüft werden, damit Sie kein anderes Element auswählen.quelle
jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });
Die Lösung von Steve und Peter funktioniert sehr gut.
In einigen Fällen müssen Sie den Wert jedoch möglicherweise in eine Ganzzahl konvertieren. Seltsamerweise ist der zurückgegebene Wert von
$("...").offset().top
manchmal infloat
.Verwenden:
parseInt($("....").offset().top)
Zum Beispiel:
quelle
Eine kompakte Version der "animierten" Lösung.
Grundlegende Verwendung:
$('#your_element').scrollTo();
quelle
So mache ich es.
Funktioniert in jedem Browser.
Es kann leicht in eine Funktion eingewickelt werden
Hier ist ein Arbeitsbeispiel
Docs
quelle
Ich kenne einen Weg ohne jQuery:
Bearbeiten: Es ist zwei Jahre her und ich bekomme immer noch zufällig Ruf von diesem Beitrag lmao
quelle
Wenn Sie nur mit dem Scrollen zu einem Eingabeelement arbeiten, können Sie verwenden
focus()
. Wenn Sie beispielsweise zur ersten sichtbaren Eingabe scrollen möchten:Oder die erste sichtbare Eingabe in einem Container mit Klasse
.error
:Vielen Dank an Tricia Ball für diesen Hinweis!
quelle
Mit dieser Lösung benötigen Sie kein Plugin und es ist kein Setup erforderlich, außer das Skript vor Ihrem schließenden
</body>
Tag zu platzieren.Wenn die Adresse beim Laden einen Hash enthält, scrollen wir dorthin.
Und - wenn Sie auf einen
a
Link mit einemhref
Hash klicken#top
, scrollen wir dorthin.quelle
> 1
statt sein0
, nur weil/#
dieses Skript kaputt gehtreturn false;
am Ende des On-Click-Ereignisses verhindern, dass die Standardaktion - sofort zum Anker scrollen - ausgeführt wird.e.preventDefault();
e.preventDefault()
aktualisiert jedoch nicht den Hash in der URL beim Klicken, es ist immer eine URL ohne HashIn den meisten Fällen ist es am besten, ein Plugin zu verwenden. Ernsthaft. Ich werde meine hier anpreisen . Natürlich gibt es auch andere. Aber bitte überprüfen Sie, ob sie die Fallstricke, für die Sie überhaupt ein Plugin benötigen, wirklich vermeiden - nicht alle tun dies.
Ich habe über die Gründe für die Verwendung eines Plugins an anderer Stelle geschrieben . Kurz gesagt, der eine Liner, der die meisten Antworten hier untermauert
ist schlecht UX.
Die Animation reagiert nicht auf Benutzeraktionen. Es wird auch dann fortgesetzt, wenn der Benutzer klickt, tippt oder versucht zu scrollen.
Wenn der Startpunkt der Animation nahe am Zielelement liegt, ist die Animation schmerzhaft langsam.
Wenn sich das Zielelement am unteren Rand der Seite befindet, kann es nicht zum oberen Rand des Fensters gescrollt werden. Die Bildlaufanimation stoppt dann abrupt in der Mitte der Bewegung.
Um diese Probleme (und eine Reihe anderer ) zu lösen , können Sie ein Plugin von mir, jQuery.scrollable, verwenden . Der Anruf wird dann
und das ist es. Natürlich gibt es mehr Möglichkeiten .
In Bezug auf die Zielposition
$target.offset().top
erledigt die Arbeit in den meisten Fällen. Beachten Sie jedoch, dass der zurückgegebene Wert keine Begrenzung deshtml
Elements berücksichtigt ( siehe diese Demo ). Wenn die Zielposition unter keinen Umständen genau sein soll, ist es besser, sie zu verwendenDas funktioniert auch, wenn ein Rand für das
html
Element festgelegt ist.quelle
Animationen:
quelle
Wenn Sie innerhalb eines Überlaufcontainers scrollen möchten (anstatt
$('html, body')
oben beantwortet zu werden) und auch mit absoluter Positionierung arbeiten möchten, gehen Sie wie folgt vor:quelle
Einfacher Weg, um den Bildlauf der Seite zur Ziel-Div-ID zu erreichen
quelle
Dies ist mein Ansatz, die IDs und Hrefs mithilfe eines generischen Klassenselektors zu abstrahieren
quelle
Sehr einfaches und benutzerfreundliches jQuery-Plugin. Fügen Sie einfach das Attribut
scroll=
zu Ihrem anklickbaren Element hinzu und setzen Sie seinen Wert auf den Selektor, zu dem Sie scrollen möchten.Wie so :
<a scroll="#product">Click me</a>
. Es kann für jedes Element verwendet werden.quelle
quelle
$('html, body').animate(...)
funktioniert nicht für mich auf iPhone, Android Chrome Safari Browser.Ich musste auf das Stamminhaltselement der Seite abzielen.
Hier ist, was ich am Ende habe
Der gesamte Körperinhalt ist mit einem #content div verkabelt
quelle
Dies ist Atharvas Antwort von: https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView . Sie möchten nur hinzufügen, ob sich Ihr Dokument in einem Iframe befindet. Sie können ein Element im übergeordneten Frame auswählen, um in die Ansicht zu scrollen:
quelle
quelle
Dies wird zuerst nach unten scrollen
#submit
dann den Cursor wieder auf die Eingabe zurückzusetzen, auf die geklickt wurde. ahmt einen Bildlauf nach unten nach und funktioniert in den meisten Browsern. Es erfordert auch kein jQuery, da es in reinem JavaScript geschrieben werden kann.Kann diese Art der Verwendung von
focus
Funktionen die Animation durch Verketten vonfocus
Aufrufen besser imitieren? Ich habe diese Theorie nicht getestet, aber sie würde ungefähr so aussehen:quelle
Ich habe ein Modul- Scroll-Element eingerichtet
npm install scroll-element
. Es funktioniert so:Geschrieben mit Hilfe der folgenden SO-Beiträge:
Offset-Top-eines-Elements-ohne-Abfrage
Scrolltop-Animation-ohne-Abfrage
Hier ist der Code:
quelle
So zeigen Sie das vollständige Element an (falls dies mit der aktuellen Fenstergröße möglich ist):
quelle
Ich habe eine Allzweckfunktion geschrieben, die entweder zu einem jQuery-Objekt, einem CSS-Selektor oder einem numerischen Wert scrollt.
Anwendungsbeispiel:
Der Funktionscode:
quelle
Für das, was es wert ist, habe ich es geschafft, ein solches Verhalten für ein allgemeines Element zu erreichen, das sich in einem DIV mit Bildlauf befinden kann. In unserem Fall scrollen wir nicht den ganzen Körper, sondern nur bestimmte Elemente mit Überlauf: auto; innerhalb eines größeren Layouts.
Es erstellt eine gefälschte Eingabe der Höhe des Zielelements und legt dann einen Fokus darauf. Der Browser kümmert sich um den Rest, egal wie tief Sie sich in der scrollbaren Hierarchie befinden. Klappt wunderbar.
quelle
Das hat bei mir funktioniert:
quelle
quelle
EINZEILER
Code-Snippet anzeigen
quelle
Aktualisierte Antwort ab 2019:
quelle