Mit JavaScript zum Anfang der Seite scrollen?


1593

Wie scrolle ich mit JavaScript zum Anfang der Seite? Dies ist auch dann wünschenswert, wenn die Bildlaufleiste sofort nach oben springt. Ich suche kein reibungsloses Scrollen.


2019, um dies zu vermeiden „Diese Site scheint einen durch Scrollen verknüpften Positionierungseffekt zu verwenden. Dies funktioniert möglicherweise nicht gut mit asynchronem Schwenken. “Verwenden Sie mein Skript stackoverflow.com/a/57641938/5781320
Constantin

Antworten:


2172

Wenn Sie die Änderung nicht zum Animieren benötigen, müssen Sie keine speziellen Plugins verwenden. Ich würde nur die native JavaScript-Methode window.scrollTo verwenden. Wenn Sie 0,0 übergeben, wird die Seite sofort nach links oben gescrollt .

window.scrollTo(x-coord, y-coord);

Parameter

  • x-Koordinate ist das Pixel entlang der horizontalen Achse.
  • y-Koordinate ist das Pixel entlang der vertikalen Achse.

176
Das war mein Punkt, wenn Sie kein reibungsloses Scrollen animieren müssen, müssen Sie jQuery nicht verwenden.
Daniellmb

23
Witzig, da Jeffs Kommentar ehrlich gesagt für Leute ist, die nur wollen, dass die Dinge in 95% der Fälle browserübergreifend funktionieren, sollten sie einfach jQuery verwenden. Dies kommt von jemandem, der gerade viel reines Javascript schreiben muss, weil wir uns den Overhead einer Bibliothek nicht leisten können, die den Anzeigencode verlangsamt :(
Will

11
Diese Antwort hat nichts mit der Frage zu tun. Es wäre in Ordnung, wenn die Frage lauten würde: Welches Skript und welche Methoden sollte ich verwenden, um zum Anfang der Seite zu scrollen? Die richtige Antwort finden Sie hier: stackoverflow.com/questions/4147112/…
skobaljic

2
Ich arbeite für mich in Firefox 40 und Chrome 44 (um Mikhails Kommentar anzusprechen)
Tony

10
Scrollen Sie zum Ende der Seitewindow.scrollTo(0, document.body.scrollHeight);
Emix

1346

Wenn Sie reibungslos scrollen möchten, versuchen Sie Folgendes:

$("a[href='#top']").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});

Das wird jedes <a>Tag nehmen, dessen href="#top"und es glatt nach oben scrollen.


+1. Ich habe mich nur gefragt, wie ich so etwas machen soll und Google hat mich hierher geführt. Frage: Wo ist die Funktion "scrollTop" in den Dokumenten? Ich habe nur geschaut, konnte es aber nicht finden.
sqram

22
scrollTop ist keine Funktion, es ist eine Eigenschaft des Fensterelements
Jalal El-Shaer

1
Dies funktioniert nicht richtig, wenn der vollständige Rückruf von animiert verwendet wird, da er zweimal ausgeführt wird.
David Morales

5
"html" und "body" sind beide für die Browserkompatibilität erforderlich, dh Chrome v27 scrollt nur mit "body" und IE8 nicht. IE8 scrollt nur mit "html", Chrome v27 jedoch nicht.
SushiGuy

1
@jalchr Eigentlich window.pageYOffsetwäre das Eigentum des Fensters e̶l̶e̶m̶e̶n̶t̶ Objekt.
Alex W

176

Versuchen Sie dies, um nach oben zu scrollen

<script>
 $(document).ready(function(){
    $(window).scrollTop(0);
});
</script>

Dies ist das gleiche: if ('scrollRestoration' in der Geschichte) {history.scrollRestoration = 'manual'; }
Vasilii Suricov

123

Bessere Lösung mit flüssiger Animation:

// this changes the scrolling behavior to "smooth"
window.scrollTo({ top: 0, behavior: 'smooth' });

Referenz: https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo#Example


Möglicherweise müssen Sie noch Polyfill-Unterstützung für die ScrollOptions(für bestimmte Browser): github.com/iamdustan/smoothscroll
jneuendorf

Ich mag diese Lösung sehr.
SuperManEver

Kann jemand dies auf Safari oder Internet Explorer testen und sehen, ob es gut funktioniert? Danke
Fabio Magarelli

1
@FabioMagarelli Es funktioniert gut auf Safari, nicht auf IE getestet. Um es auf Safari zu testen, öffnen Sie eine Seite, auf der gescrollt und kopiert wurde, und fügen Sie den obigen Code in Developer Tools -> Console ein. Es wird nach oben gescrollt (Safari Version 13.0.5).
Ganesh Ghalame

104

Dazu benötigen Sie jQuery nicht. Ein Standard-HTML-Tag reicht aus ...

<div id="jump_to_me">
    blah blah blah
</div>

<a target="#jump_to_me">Click Here To Destroy The World!</a>

12
+1 Dies ist gut, wenn Sie zu einem bestimmten Element navigieren müssen und nicht nur nach oben.
Ish

38
Verwenden Sie '<a href="#"> Oben </a>', um zum Anfang der Seite zu springen.
Bakanekobrain

3
Dies scheint der beste Weg zu sein, wenn es um SPAs geht
Phil

Nett! Gibt es eine Möglichkeit, das Scrollen reibungslos zu gestalten?
StallingOne

65

Alle diese Vorschläge eignen sich hervorragend für verschiedene Situationen. Für diejenigen, die diese Seite über eine Suche finden, kann man dies auch ausprobieren. JQuery, kein Plug-In, scrollen Sie zum Element.

$('html, body').animate({
    scrollTop: $("#elementID").offset().top
}, 2000);

47

glatte Schriftrolle, reines Javascript:

(function smoothscroll(){
    var currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
    if (currentScroll > 0) {
         window.requestAnimationFrame(smoothscroll);
         window.scrollTo (0,currentScroll - (currentScroll/5));
    }
})();

31
<script>
$(function(){
   var scroll_pos=(0);          
   $('html, body').animate({scrollTop:(scroll_pos)}, '2000');
});
</script>

Bearbeiten:

$('html, body').animate({scrollTop:(scroll_pos)}, 2000);

Eine andere Möglichkeit, mit dem oberen und linken Rand zu scrollen:

window.scrollTo({ top: 100, left: 100, behavior: 'smooth' });

4
Sind Sie sicher, dass die Dauer als Zeichenfolge in der Animationsfunktion funktioniert?
Yogesh

Sie können für die Dauer der animateFunktion keine Zeichenfolge verwenden. Stattdessen sollten Sie $('html, body').animate({scrollTop:(scroll_pos)}, 2000);
Folgendes

1
Was bringt es, 0 in Klammern zu setzen? ((0)) wird einfach mit 0 bewertet.
Jack Vial

Ja @Jack, du kannst.
Kamlesh

29
<script>

  $("a[href='#top']").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
  });
</script>

in html

<a href="#top">go top</a>

28

Wirklich seltsam: Diese Frage ist seit fünf Jahren aktiv und es gibt immer noch keine Vanille-JavaScript-Antwort, um das Scrollen zu animieren. Also los geht's:

var scrollToTop = window.setInterval(function() {
    var pos = window.pageYOffset;
    if ( pos > 0 ) {
        window.scrollTo( 0, pos - 20 ); // how far to scroll on each step
    } else {
        window.clearInterval( scrollToTop );
    }
}, 16); // how fast to scroll (this equals roughly 60 fps)

Wenn Sie möchten, können Sie dies in eine Funktion einbinden und über das onclickAttribut aufrufen . Überprüfen Sie diese jsfiddle

Hinweis: Dies ist eine sehr einfache Lösung und möglicherweise nicht die leistungsstärkste. Ein sehr ausführliches Beispiel finden Sie hier: https://github.com/cferdinandi/smooth-scroll


6
In der Frage wird jedoch explizit nach einer jQuery-Lösung gefragt. also nicht seltsam
Will

2
Beste Lösung für mich. Keine Plugins, keine umfangreiche JQuery-Bibliothek, nur einfaches Javascript. Kudos
user2840467

Mann, ich habe auch dieselbe Logik XD nach 5 Jahren erstellt, genau dieselbe Logik, nur Werte sind unterschiedlich wie, die Intervallzeit und die ganze Zahl, die wir zum Subtrahieren verwenden, können XD nicht glauben. TBH, bin hierher gekommen, um zu antworten, aber es ist schon da, also habe ich deine Antwort positiv bewertet.
Germa Vinsmoke

27

Wenn Sie reibungslos scrollen möchten, versuchen Sie Folgendes:

$("a").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
});

Eine andere Lösung ist die JavaScript-Methode window.scrollTo:

 window.scrollTo(x-value, y-value);

Parameter:

  • Der x-Wert ist das Pixel entlang der horizontalen Achse.
  • Der y-Wert ist das Pixel entlang der vertikalen Achse.

7
Nachahmer ... siehe Benutzerantworten ... Dies ist nur eine Zusammenstellung der Top 2 Antworten ....
Laurent B

Dies ist eine legitime Möglichkeit, den Stackoverflow zu verwenden. Es ist praktischer, ihn an einem Ort zu haben. Joel Spolsky verwendete die Wiederverwendung vorhandener Antworten als Beispiel dafür, wie der Stapelüberlauf an einem Punkt funktionieren soll. Wenn Sie interessiert sind, kann ich versuchen, den Blog-Beitrag zu finden
Edgar H

26

Mit window.scrollTo(0, 0);ist sehr schnell,
also habe ich das Mark Ursino-Beispiel ausprobiert, aber in Chrome passiert nichts
und ich habe dies gefunden

$('.showPeriodMsgPopup').click(function(){
    //window.scrollTo(0, 0);
    $('html').animate({scrollTop:0}, 'slow');//IE, FF
    $('body').animate({scrollTop:0}, 'slow');//chrome, don't know if Safari works
    $('.popupPeriod').fadeIn(1000, function(){
        setTimeout(function(){$('.popupPeriod').fadeOut(2000);}, 3000);
    });
});


Ich habe alle 3 Browser getestet und es funktioniert. Ich verwende Blueprint-CSS.
Wenn ein Kunde auf die Schaltfläche "Jetzt buchen" klickt und die Mietdauer nicht ausgewählt ist, bewegt er sich langsam an die Spitze der Kalender und öffnet einen Dialog, auf den div zeigt die 2 Felder, nach 3 Sekunden wird es ausgeblendet


Vielen Dank für den Hinweis, dass Sie sowohl auf HTML als auch auf den Körper abzielen müssen. Ich habe es nur für HTML gemacht und mich gefragt, warum es in Chrome nicht funktioniert hat.
Jared

Die Körperanimation funktioniert in Safari, daher aktualisiere ich Ihre Antwort entsprechend.
Dave DuPlantis

46
" Alle 3 Browser getestet "? Midori, LuaKit und Konqueror, richtig? : p
Anko

14
Warum nicht einfach $ ('html', 'body'). Animieren ({scrollTop: 0}), anstatt zwei Zeilen hinzuzufügen?
Matt Smith

23

Eine Menge von Benutzern empfiehlt die Auswahl sowohl die HTML - und Body - Tags für Cross-Browser - Kompatibilität, etwa so:

$('html, body').animate({ scrollTop: 0 }, callback);

Dies kann Sie jedoch stören, wenn Sie darauf zählen, dass Ihr Rückruf nur einmal ausgeführt wird. Es wird tatsächlich zweimal ausgeführt, da Sie zwei Elemente ausgewählt haben.

Wenn das ein Problem für Sie ist, können Sie Folgendes tun:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    $('body').animate({ scrollTop: 0 }, callback);
}

Der Grund dafür ist, dass in Chrome $('html').scrollTop()0 zurückgegeben wird, in anderen Browsern wie Firefox jedoch nicht.

Wenn Sie nicht warten möchten, bis die Animation abgeschlossen ist, falls sich die Bildlaufleiste bereits oben befindet, versuchen Sie Folgendes:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    if ($('body').scrollTop()) {
        $('body').animate({ scrollTop: 0 }, callback);
        return;
    }

    callback();
}

19

Der Alte #topkann den Trick machen

document.location.href = "#top";

Funktioniert gut in FF, IE und Chrome


Nett! Gibt es eine Möglichkeit, das Scrollen reibungslos zu gestalten?
StallingOne

Sie sollten navigationsbasierte Lösungen vermeiden, siehe Kommentare zu Sriramajeyams Antwort.
Andrew Grothe

15

$(".scrolltop").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});
.section{
 height:400px;
}
.section1{
  background-color: #333;
}
.section2{
  background-color: red;
}
.section3{
  background-color: yellow;
}
.section4{
  background-color: green;
}
.scrolltop{
  position:fixed;
  right:10px;
  bottom:10px;
  color:#fff;
}
<html>
<head>
<title>Scroll top demo</title>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
<div class="content-wrapper">
<div class="section section1"></div>
<div class="section section2"></div>
<div class="section section3"></div>
<div class="section section4"></div>
<a class="scrolltop">Scroll top</a>
</div>

</body>
</html>


3
Während dieser Code die Frage beantworten kann, verbessert die Bereitstellung von Informationen darüber, wie und warum er das Problem löst, seinen langfristigen Wert
L_J

Erkläre deine Antwort!
Ullas Hunka

Auf einer Webseite klickt jeder Benutzer auf die Schaltfläche "Bildlauf nach oben" und die Seite mit der Animation nach oben.
Arvinda Kumar

Warum animieren () statt jquery scroll ()?
Akin Hwan

14

Versuche dies

<script>
    $(window).scrollTop(100);
</script>

14

$(document).scrollTop(0); funktioniert auch.


2
Beachten Sie, dass dies nicht funktioniert, wenn Sie Firefox nicht verwenden. Sie erhalten eine Fehlermeldung, wenn Sie nur ein Argument angeben (Fehler: Nicht genügend Argumente [nsIDOMWindow.scrollTo]).
Husky

14

Nicht-jQuery-Lösung / reines JavaScript:

document.body.scrollTop = document.documentElement.scrollTop = 0;


10

Versuchen Sie diesen Code:

$('html, body').animate({
    scrollTop: $("div").offset().top
}, time);

div => Dom Element, in das Sie den Bildlauf verschieben möchten.

Zeit => Millisekunden, definieren Sie die Geschwindigkeit des Bildlaufs.


9

Reine JavaScript-Lösung:

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
});

Ich schreibe eine animierte Lösung auf Codepen

Sie können auch eine andere Lösung mit CSS- scroll-behavior: smoothEigenschaft ausprobieren .

html {
    scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
}

8

Warum verwenden Sie nicht die in JQuery integrierte Funktion scrollTop:

$('html, body').scrollTop(0);//For scrolling to top

$("body").scrollTop($("body")[0].scrollHeight);//For scrolling to bottom

Kurz und einfach!


Sie vermissen nur den Link zum Dokument
Cyril Duchon-Doris

8

Sie brauchen JQuery nicht. Sie können einfach das Skript aufrufen

window.location = '#'

Klicken Sie auf die Schaltfläche "Nach oben"

Beispieldemo:

output.jsbin.com/fakumo#

PS: Verwenden Sie diesen Ansatz nicht, wenn Sie moderne Bibliotheken wie anglejs verwenden. Das könnte den URL-Hashbang kaputt machen.


9
Leider ist dies nicht die beste Lösung, da Sie in diesem Fall den Standort physisch ändern, anstatt die Seite zu scrollen. Dies kann zu Problemen führen, wenn der Standort wichtig ist (bei Verwendung von Angular Routing oder so)
Yaroslav Rogoza

2
@ JaroslavRogoza ist korrekt. Obwohl es in einfachen Fällen funktionieren kann , würde ich diese Lösung nicht empfehlen. Der Standort wird immer wichtiger und Apps mit nur einer Seite verwenden den Hash häufig für die Navigation. Sie würden sofort einen Nebenwirkungsfehler einführen, wenn Sie entweder eine Hash-basierte Navigation danach oder eine Hash-basierte Navigation hinzufügen.
Andrew Grothe

8

Verwenden Sie einfach dieses Skript, um direkt nach oben zu scrollen.

<script>
$(document).ready(function(){
    $("button").click(function(){
        ($('body').scrollTop(0));
    });
});
</script>

7

Wenn Sie keinen reibungslosen Bildlauf wünschen, können Sie die Animation für den reibungslosen Bildlauf betrügen und stoppen, sobald Sie sie starten ... wie folgt:

   $(document).ready(function() {
      $("a[href='#top']").click(function() {
          $("html, body").animate({ scrollTop: 0 }, "1");              
          $('html, body').stop(true, true);

          //Anything else you want to do in the same action goes here

          return false;                              
      });
  });

Ich habe keine Ahnung, ob es empfohlen / erlaubt ist, aber es funktioniert :)

Wann würden Sie dies verwenden? Ich bin mir nicht sicher, aber vielleicht, wenn Sie einen Klick verwenden möchten, um eine Sache mit Jquery zu animieren, aber eine andere ohne Animation? Öffnen Sie also oben auf der Seite ein Anmelde-Admin-Anmeldefenster und springen Sie sofort nach oben, um es anzuzeigen.


6

Motivation

Diese einfache Lösung funktioniert nativ und implementiert einen reibungslosen Bildlauf zu einer beliebigen Position.

Es wird vermieden, Ankerlinks (solche mit #) zu verwenden, die meiner Meinung nach nützlich sind, wenn Sie auf einen Abschnitt verlinken möchten, aber in einigen Situationen nicht so komfortabel sind, insbesondere wenn Sie nach oben zeigen, was dazu führen kann, dass zwei verschiedene URLs auf die verweisen gleicher Ort ( http://www.example.org und http://www.example.org/# ).

Lösung

Fügen Sie dem Tag, zu dem Sie scrollen möchten, eine ID hinzu , z. B. Ihrem ersten Abschnitt , in dem diese Frage beantwortet wird. Die ID kann jedoch überall auf der Seite platziert werden.

<body>
  <section id="top">
    <!-- your content -->
  </section>
  <div id="another"><!-- more content --></div>

Dann können Sie als Schaltfläche einen Link verwenden. Bearbeiten Sie einfach das onclick- Attribut mit einem Code wie diesem.

<a onclick="document.getElementById('top').scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' })">Click me</a>

Wobei das Argument von document.getElementByIddie ID des Tags ist, zu dem Sie nach dem Klicken scrollen möchten.


Danke! ist eine großartige Lösung
Hugo Stiven Laguna Rueda

@HugoStivenLagunaRueda Gern geschehen, ich habe es auf MDN gefunden, also danke an Mozilla. Es ist großartig, wie viele Dinge bereits vorhanden sind, die von Haus aus unterstützt werden. Ich liebe Vanille JS.
Gianluca Casati

5

Sie können einfach ein Ziel aus Ihrem Link verwenden, z. B. #someid, wobei #someid die ID des Divs ist.

Sie können auch eine beliebige Anzahl von Bildlauf-Plugins verwenden, die dies eleganter machen.

http://plugins.jquery.com/project/ScrollTo ist ein Beispiel.


4

Sie können versuchen, JS wie in dieser Geige zu verwenden http://jsfiddle.net/5bNmH/1/

Fügen Sie die Schaltfläche "Nach oben" in Ihre Seitenfußzeile ein:

<footer>
    <hr />
    <p>Just some basic footer text.</p>
    <!-- Go to top Button -->
    <a href="#" class="go-top">Go Top</a>
</footer>

4
function scrolltop() {

    var offset = 220;
    var duration = 500;

    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset) {
            jQuery('#back-to-top').fadeIn(duration);
        } else {
            jQuery('#back-to-top').fadeOut(duration);
        }
    });

    jQuery('#back-to-top').click(function(event) {
        event.preventDefault();
        jQuery('html, body').animate({scrollTop: 0}, duration);
        return false;
    });
}

4

Keine der oben genannten Antworten funktioniert in SharePoint 2016.

Dies muss folgendermaßen erfolgen: /sharepoint/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.