Scrollen Sie automatisch zum Ende der Seite


415

Bedenken Sie, ich habe eine Liste mit Fragen. Wenn ich auf die erste Frage klicke, sollte ich automatisch zum Ende der Seite gelangen.

Tatsächlich weiß ich, dass dies mit jQuery möglich ist.

Könnten Sie mir eine Dokumentation oder einige Links zur Verfügung stellen, unter denen ich eine Antwort auf diese Frage finden kann?

BEARBEITEN: Sie müssen zu einem bestimmten HTML- Element am Ende der Seite scrollen


Antworten:


807

jQuery ist nicht erforderlich. Die meisten der besten Ergebnisse einer Google-Suche gaben mir folgende Antwort:

window.scrollTo(0,document.body.scrollHeight);

Wenn Sie verschachtelte Elemente haben, wird das Dokument möglicherweise nicht gescrollt. In diesem Fall müssen Sie auf das Bildlaufelement abzielen und stattdessen dessen Bildlaufhöhe verwenden.

window.scrollTo(0,document.querySelector(".scrollingContainer").scrollHeight);

Sie können dies mit dem onclickEreignis Ihrer Frage verknüpfen (dh <div onclick="ScrollToBottom()" ...).

Einige zusätzliche Quellen, die Sie sich ansehen können:


29
Hat bei mir nicht funktioniert. Ich habe das gemacht : element.scrollTop = element.scrollHeight.
Esamo

7
4. Mai 2016: Bitte beachten Sie, dass die Funktion "scrollTo" experimentell ist und nicht in allen Browsern funktioniert.
Corgrath

1
scrollto funktionierte nicht in meinem Browser. Ich bin auf diesen Link unter stackoverflow.com/questions/8917921/… gestoßen. Dies ist sehr nützlich, da die Lösungen in allen Browsern funktionieren, die ich ausprobiert habe.
user3655574

Für ein separates Element ist dies eine funktionierende Lösung: document.querySelector (". scrollingContainer"). scrollTo (0, document.querySelector (". scrollingContainer"). scrollHeight);
mPrinC

Möglicherweise muss HTML, Körpergröße auf 100% eingestellt werden, um nach unten zu scrollen
Trever Thompson

106

Wenn Sie die gesamte Seite nach unten scrollen möchten:

var scrollingElement = (document.scrollingElement || document.body);
scrollingElement.scrollTop = scrollingElement.scrollHeight;

Siehe das Beispiel auf JSFiddle

Wenn Sie ein Element nach unten scrollen möchten:

function gotoBottom(id){
   var element = document.getElementById(id);
   element.scrollTop = element.scrollHeight - element.clientHeight;
}

Und so funktioniert es:

Geben Sie hier die Bildbeschreibung ein

Ref: scrollTop , scrollHeight , clientHeight

UPDATE: Die neuesten Versionen von Chrome (61+) und Firefox unterstützen kein Scrollen des Körpers. Siehe: https://dev.opera.com/articles/fixing-the-scrolltop-bug/


Die Lösung funktioniert mit Chrome, Firefox, Safari und IE8 +. Überprüfen Sie heraus diesen Link für mehr Details quirksmode.org/dom/w3c_cssom.html
Tho

1
@luochenhuan, ich habe gerade den Beispielcode mit "document.scrollingElement" anstelle von "document.body"
behoben

58

Vanilla JS-Implementierung:

element.scrollIntoView(false);

https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView


3
mit jQuery $ ('# id') [0] .scrollIntoView (false);
Alexoviedo999

4
im Moment ist es allerdings nur Firefox
tim-we

Funktioniert jetzt in neueren Versionen von Chrome, aber einige der zusätzlichen Optionen (wie das reibungslose Scrollen) scheinen noch nicht implementiert zu sein.
Matt Zukowski

Ich habe am Ende der Seite ein leeres Div hinzugefügt und die ID dieses Div verwendet. Hat perfekt funktioniert.
Nisba

5
Noch besser:element.scrollIntoView({behavior: "smooth"});
Blalond

26

Sie können dies verwenden, um die Seite in einem Animationsformat aufzurufen.

$('html,body').animate({scrollTop: document.body.scrollHeight},"fast");

23

Unten sollte die browserübergreifende Lösung sein. Es wurde auf Chrome, Firefox, Safari und IE11 getestet

window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);

window.scrollTo (0, document.body.scrollHeight); funktioniert nicht mit Firefox, zumindest für Firefox 37.0.2


1
Es funktioniert in Firefox 62.0.3, aber ich habe keine Ahnung, wann sie das behoben haben.
zb226

11

Sie können diese Funktion überall dort verwenden, wo Sie sie aufrufen müssen:

function scroll_to(div){
   if (div.scrollTop < div.scrollHeight - div.clientHeight)
        div.scrollTop += 10; // move down

}

jquery.com: ScrollTo


Für mich document.getElementById('copyright').scrollTop += 10funktioniert nicht (im neuesten Chrome) ... bleibt Null ...
Kyle Baker

11

Manchmal erstreckt sich die Seite beim Scrollen nach Buttom (zum Beispiel in sozialen Netzwerken), um zum Ende zu scrollen (ultimatives Buttom der Seite). Ich verwende dieses Skript:

var scrollInterval = setInterval(function() { 
    document.documentElement.scrollTop = document.documentElement.scrollHeight;
}, 50);

Wenn Sie sich in der Javascript-Konsole des Browsers befinden, kann es hilfreich sein, das Scrollen zu stoppen. Fügen Sie also Folgendes hinzu:

var stopScroll = function() { clearInterval(scrollInterval); };

Und dann benutzen stopScroll();.

Wenn Sie zu einem bestimmten Element scrollen müssen, verwenden Sie:

var element = document.querySelector(".element-selector");
element.scrollIntoView();

Oder ein universelles Skript zum automatischen Scrollen zu einem bestimmten Element (oder zum Stoppen des Bildlaufintervalls):

var notChangedStepsCount = 0;
var scrollInterval = setInterval(function() {
    var element = document.querySelector(".element-selector");
    if (element) { 
        // element found
        clearInterval(scrollInterval);
        element.scrollIntoView();
    } else if((document.documentElement.scrollTop + window.innerHeight) != document.documentElement.scrollHeight) { 
        // no element -> scrolling
        notChangedStepsCount = 0;
        document.documentElement.scrollTop = document.documentElement.scrollHeight;
    } else if (notChangedStepsCount > 20) { 
        // no more space to scroll
        clearInterval(scrollInterval);
    } else {
        // waiting for possible extension (autoload) of the page
        notChangedStepsCount++;
    }
}, 50);

let size = ($ ("div [class * = 'card-insert']")). length; ($ ("div [class * = 'Karte eingelegt']")) [Größe -1] .scrollIntoView ();
nobjta_9x_tq

10

Sie können dies auch mit Animation tun, es ist sehr einfach

$('html, body').animate({
   scrollTop: $('footer').offset().top
   //scrollTop: $('#your-id').offset().top
   //scrollTop: $('.your-class').offset().top
}, 'slow');

Hoffnung hilft, danke


7

Ein Liner zum glatten Scrollen nach unten

window.scrollTo({ left: 0, top: document.body.scrollHeight, behavior: "smooth" });

Um nach oben einfach eingestellt topzu0


4

Sie können ein beliebiges idReferenzattribut hrefdes Linkelements anhängen :

<a href="#myLink" id="myLink">
    Click me
</a>

Wenn der Benutzer Click meim obigen Beispiel unten auf der Seite klickt , navigiert die Navigation zu sich Click meselbst.


Dies war nichts für mich, da es die URL ändert und meine eckige App dann zu etwas anderem umleitet!
heman123

3

Sie können Gentle Anchors ein schönes Javascript-Plugin ausprobieren .

Beispiel:

function SomeFunction() {
  // your code
  // Pass an id attribute to scroll to. The # is required
  Gentle_Anchors.Setup('#destination');
  // maybe some more code
}

Kompatibilität getestet am:

  • Mac Firefox, Safari, Oper
  • Windows Firefox, Opera, Safari, Internet Explorer 5.55+
  • Linux ungetestet, sollte aber zumindest mit Firefox in Ordnung sein

3

Spät zur Party, aber hier ist ein einfacher Javascript-Code, mit dem Sie jedes Element nach unten scrollen können :

function scrollToBottom(e) {
  e.scrollTop = e.scrollHeight - e.getBoundingClientRect().height;
}

3

Verwenden Sie zum Scrollen in Selen den folgenden Code:

Scrollen Sie bis zum unteren Dropdown bis zur Höhe der Seite. Verwenden Sie den folgenden Javascript-Code, der sowohl in JavaScript als auch in React einwandfrei funktioniert.

JavascriptExecutor jse = (JavascriptExecutor) driver; // (driver is your browser webdriver object) 
jse.executeScript("window.scrollBy(0,document.body.scrollHeight || document.documentElement.scrollHeight)", "");

3

So viele Antworten, die versuchen, die Höhe des Dokuments zu berechnen. Aber es war nicht richtig für mich zu berechnen. Beide funktionierten jedoch:

jquery

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

oder einfach nur js

    window.scrollTo(0,9999);

LOL "hat funktioniert". Was ist, wenn das Dokument länger als ist ?9999 ?
Dan Dascalescu

1
@ DanDascalescu 99999
Andrew

2

Hier ist meine Lösung:

 //**** scroll to bottom if at bottom

 function scrollbottom() {
    if (typeof(scr1)!='undefined') clearTimeout(scr1)   
    var scrollTop = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
    var scrollHeight = (document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight;
    if((scrollTop + window.innerHeight) >= scrollHeight-50) window.scrollTo(0,scrollHeight+50)
    scr1=setTimeout(function(){scrollbottom()},200) 
 }
 scr1=setTimeout(function(){scrollbottom()},200)

Was ... ist dort überhaupt los? Möchtest du deine Lösung erklären? Von Nur-Code-Antworten wird abgeraten.
Dan Dascalescu

0

Dadurch wird garantiert nach unten gescrollt

Kopfcodes

<script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script language="javascript" type="text/javascript">
function scrollToBottom() {
  $('#html, body').scrollTop($('#html, body')[0].scrollHeight);
}
</script>

Körpercode

<a href="javascript:void(0);" onmouseover="scrollToBottom();" title="Scroll to Bottom">&#9660; Bottom &#9660;</a>

0

Ein Bild sagt mehr als tausend Worte:

Der Schlüssel ist:

document.documentElement.scrollTo({
  left: 0,
  top: document.documentElement.scrollHeight - document.documentElement.clientHeight,
  behavior: 'smooth'
});

Es wird verwendet document.documentElement, welches das <html>Element ist. Es ist wie mit window, aber es ist nur meine persönliche Präferenz es auf diese Weise zu tun, denn wenn es nicht die ganze Seite ist nur ein Container, funktioniert es einfach so , außer Sie würden ändern document.bodyund document.documentElementzu document.querySelector("#container-id").

Beispiel:

let cLines = 0;

let timerID = setInterval(function() {
  let elSomeContent = document.createElement("div");

  if (++cLines > 33) {
    clearInterval(timerID);
    elSomeContent.innerText = "That's all folks!";
  } else {
    elSomeContent.innerText = new Date().toLocaleDateString("en", {
      dateStyle: "long",
      timeStyle: "medium"
    });
  }
  document.body.appendChild(elSomeContent);

  document.documentElement.scrollTo({
    left: 0,
    top: document.documentElement.scrollHeight - document.documentElement.clientHeight,
    behavior: 'smooth'
  });

}, 1000);
body {
  font: 27px Arial, sans-serif;
  background: #ffc;
  color: #333;
}

Sie können den Unterschied vergleichen, wenn es keine gibt scrollTo():


0

Ein einfacher Weg, wenn Sie ein bestimmtes Element nach unten scrollen möchten

Rufen Sie diese Funktion auf, wenn Sie nach unten scrollen möchten.

function scrollDown() {
 document.getElementById('scroll').scrollTop =  document.getElementById('scroll').scrollHeight
}
ul{
 height: 100px;
 width: 200px;
 overflow-y: scroll;
 border: 1px solid #000;
}
<ul id='scroll'>
<li>Top Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Bottom Here</li>
<li style="color: red">Bottom Here</li>
</ul>

<br />

<button onclick='scrollDown()'>Scroll Down</button>


Dies ist nicht einfach und erfordert das Erstellen eines scrollElements.
Dan Dascalescu

@ DanDascalescu Du hast recht! Aber mein Code funktioniert. Ich glaube nicht, dass er eine Abstimmung verdient
Shrroy,

"Works" ist nicht genug. Alle Lösungen auf dieser Seite "funktionieren" bis zu einem gewissen Grad. Und es gibt eine Menge von ihnen. Wie soll sich ein Leser entscheiden?
Dan Dascalescu

-1
getDocHeight: function() {
  var D = document;
  return Math.max(
    D.body.scrollHeight,
    D.documentElement.scrollHeight,
    D.body.offsetHeight,
    D.documentElement.offsetHeight,
    D.body.clientHeight,
    D.documentElement.clientHeight
  );
}

document.body.scrollTop = document.documentElement.scrollTop = this.getDocHeight();

-1

window.scrollTo (0,1e10);

funktioniert immer.

1e10 ist eine große Zahl. Es ist also immer das Ende der Seite.


-1

Wenn jemand nach Angular sucht

Sie müssen nur nach unten scrollen und dies Ihrem Div hinzufügen

 #scrollMe [scrollTop]="scrollMe.scrollHeight"

   <div class="my-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
   </div>
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.