Ich suche nach einer einfachen, browserübergreifenden Animation "Nach oben scrollen", die ich auf einen Link anwenden kann. Ich möchte keine JS-Bibliothek wie jQuery / Moo usw. benötigen.
// jQuery Equivilant to convert to pure JS...
$('html, body').animate({scrollTop:0}, 400);
Ich bin ein perfekter Fall für jemanden, der JS zu 100% hätte lernen sollen, bevor er in eine Bibliothek gesprungen ist. :((
javascript
Heather Hins
quelle
quelle
var something = $(...)
) und dem Wiederherstellen von Millionen von Objekten in jeder Funktion (sie kennen Variablen, wissen das aber nichtvar veryBigObject = {...}
mit einigen hundert Eigenschaften bei Die Spitze der Funktion wird die Leistung ermorden. Und sehr oft wissen sie nicht einmal, dass die Sprache Javascript heißt, nicht jQuery.Antworten:
Demo:
quelle
document.documentElement
stattdocument.body
(es sei denn, Sie setzen CSS :)body{height:100%;}
. Arbeitsdemoif (duration <= 0) return;
top.window.scroll(0, value)
anstattelement.scrollTop = value
es in Chrome und Firefox (Ubuntu) zu verwenden. :)Es sieht so aus, als gäbe es bereits viele Lösungen. Wie auch immer, hier ist eine andere, die Lockerungsgleichungen verwendet.
quelle
requestAnimationFrame
requestAnimationFrame
ist nicht mit allen Browsern kompatibel, nur einige Handys, daher ist es keine dynamische Lösung, siehe: developer.mozilla.org/en-US/docs/Web/API/window/…requestAnimationFrame
, die sich um etwaige Browser-InkompatibilitätenIch habe es aus einem Artikel über Smooth Scrolling erhalten .
Bei Bedarf stehen einige Polyfills zur Verfügung.
quelle
scrollIntoView({behavior: 'smooth'})
es das auch gibt und dass ich tun kann, was die Leute für diese Art von Problem brauchen.Uncaught TypeError: Failed to execute 'scroll' on 'Window': No function was found that matched the signature provided.
Ich habe TimWollas Antwort geändert, um die quadratische In-Out-Beschleunigung zu verwenden (etwas weicher :). Hier ist ein Beispiel in Aktion: auf jsFiddle . Lockerungsfunktionen finden Sie hier: Die Lockerungsfunktionen von Robert Penner
quelle
document. documentElement
funktioniert nicht in Chrome.Ich hoffe, dies wird Ihnen ohne JQuery-Code helfen.
Rufen Sie diese TopscrollTo () -Funktion beim Klicken auf eine Schaltfläche oder bei einem anderen gewünschten Element / Ereignis auf.
quelle
Ich habe den Code von @TimWolla geändert, um weitere Optionen und einige Bewegungsfunktionen hinzuzufügen. Unterstützung für Crossbrowser mit document.body.scrollTop und document.documentElement.scrollTop hinzugefügt
http://jsfiddle.net/forestrf/tPQSv/
Minimierte Version: http://jsfiddle.net/forestrf/tPQSv/139/
quelle
1 / duration
bringt es , wenn Sie scrollToX zum ersten Mal aufrufen?Es gibt tatsächlich eine reine Javascript-Methode, um dies zu erreichen, ohne
setTimeout
oder zu verwendenrequestAnimationFrame
oder jQuery zu erreichen.Kurz gesagt, suchen Sie das Element in der scrollView, zu dem Sie scrollen möchten, und verwenden Sie scrollIntoView
el.scrollIntoView({behavior:"smooth"});
Hier ist ein Plunkr .
quelle
scrollIntoViewOption
keine browserübergreifende Unterstützung bietet. developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewAngepasst an diese Antwort :
Dies sollte es Ihnen ermöglichen, reibungslos von einer beliebigen Stelle zum angegebenen "y" zu scrollen (Kosinusfunktion).
quelle
Niemand erwähnte die CSS-Eigenschaft Scroll-Verhalten
CSS
JS
quelle
PURE JAVASCRIPT SCROLLER KLASSE
Dies ist eine alte Frage, aber ich dachte, ich könnte sie mit ein paar ausgefallenen Dingen und einigen weiteren Optionen zum Spielen beantworten, wenn Sie etwas mehr Kontrolle über die Animation haben möchten.
Hier ist es eine reine JS-Klasse, die sich um das Scrollen kümmert:
SEHEN SIE DEMO BEI CODEPEN ODER GEHEN SIE UNTEN UND LAUFEN SIE DEN SINPET
VOLLKLASSIGES SCRIPT + GEBRAUCHSBEISPIEL:
quelle
Einfach.
quelle
window.scrollTo(x, y);
..scrollTop
und angeboten.scrollLeft
.*scroll
bei der Berechnung der Bildlaufposition verwendet werden sollte . Ich sehe jedoch keine fehlenden;
...Habe gerade diese Javascript-Lösung unten gemacht.
Einfache Verwendung:
Engine-Objekt (Sie können mit Filter- und FPS-Werten herumspielen):
quelle
console.warn
Und auch String-Parameter insetTimeout
sind im Produktionscode nicht geeignet (die zweite ist ziemlich ungeeignet überall, da es imeval
Grunde ist).Aufbauend auf einigen der Antworten hier, aber mit einer einfachen Mathematik für einen reibungslosen Übergang unter Verwendung einer Sinuskurve:
Verwendung:
PS. Beachten Sie den ES6-Stil
quelle
Dies ist ein browserübergreifender Ansatz, der auf den obigen Antworten basiert
quelle
difference
und passiertperTick
?Ein weiterer Ansatz ist die Verwendung von window.scrollBy
JSFiddle
quelle
Ich habe die @akai-Version von @timwolla answer ausgewählt und im Gegenzug die stopAnimation-Funktion hinzugefügt, sodass vor dem Starten einer neuen Animation die alte gestoppt werden kann.
quelle
Ein weiterer browserübergreifender Ansatz, der auf der obigen Lösung basiert
Der Trick besteht darin, die tatsächliche Bildlaufänderung zu steuern. Wenn sie Null ist, ändern Sie das Bildlaufelement.
quelle
Lineare Bildlaufanimation nach unten. Pure JS, keine JQuery. Vielleicht ist meine Lösung für jemanden hilfreich.
Sie können Variablen ändern
action_count
,speed_ms
um die Bildlaufanimation nach Ihrem Geschmack zu konfigurieren.quelle
Verwenden Sie diese Lösung
Vielen Dank
quelle
animate()
Funktion im Fensterbereich ... Ich denke, Sie verstehen das falsch. DieElement.animate()
Funktion wird von vielen Browsern nicht erkannt. Siehe developer.mozilla.org/en-US/docs/Web/API/Element/animateIch sehe, dass die meisten / alle oben genannten Beiträge nach einer Schaltfläche mit Javascript suchen. Dies funktioniert, solange Sie nur eine Schaltfläche haben. Ich würde empfehlen, ein "onclick" -Element innerhalb der Schaltfläche zu definieren. Dieser "Onclick" würde dann die Funktion aufrufen, wodurch ein Bildlauf durchgeführt wird.
Wenn Sie es so machen, können Sie mehr als eine Schaltfläche verwenden, solange die Schaltfläche ungefähr so aussieht:
quelle