Przewiń automatycznie do dolnej części strony

415

Zastanów się, czy mam listę pytań. Po kliknięciu pierwszego pytania powinno ono automatycznie przenieść mnie na dół strony.

W rzeczywistości wiem, że można to zrobić za pomocą jQuery.

Czy mógłbyś podać mi dokumentację lub linki, na których mogę znaleźć odpowiedź na to pytanie?

EDYCJA: Musisz przewinąć do określonego elementu HTML na dole strony

jat
źródło
tutaj :: stackoverflow.com/questions/4249353/…
Sudhir Bastakoti

Odpowiedzi:

807

jQuery nie jest konieczne. Większość najlepszych wyników wyszukiwania Google dała mi następującą odpowiedź:

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

W przypadku zagnieżdżenia elementów dokument może się nie przewijać. W takim przypadku musisz wybrać element przewijany i użyć jego wysokości przewijania.

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

Możesz powiązać to ze onclickzdarzeniem twojego pytania (tj <div onclick="ScrollToBottom()" ....).

Niektóre dodatkowe źródła, na które możesz spojrzeć:

Zhihao
źródło
29
Nie działało dla mnie. Zrobiłem to: element.scrollTop = element.scrollHeight.
Esamo,
7
4 maja 2016 r .: Należy pamiętać, że funkcja „scrollTo” jest eksperymentalna i nie działa we wszystkich przeglądarkach.
corgrath
1
scrollto nie działało w mojej przeglądarce, natrafiłem na ten link pod stackoverflow.com/questions/8917921/..., co jest bardzo przydatne, ponieważ rozwiązania działają w przeglądarkach, których wypróbowałem.
user3655574 12.04.17
dla osobnego elementu działa to rozwiązanie: document.querySelector (". scrollingContainer"). scrollTo (0, document.querySelector (". scrollingContainer"). scrollHeight);
mPrinC,
Może trzeba ustawić HTML, wysokość ciała na 100%, aby przewinąć do dołu
Trever Thompson
106

Jeśli chcesz przewinąć całą stronę na dół:

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

Zobacz próbkę na JSFiddle

Jeśli chcesz przewinąć element na dół:

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

I tak to działa:

enter image description here

Ref: scrollTop , scrollHeight , clientHeight

AKTUALIZACJA: Najnowsze wersje Chrome (61+) i Firefox nie obsługują przewijania treści, patrz: https://dev.opera.com/articles/fixing-the-scrolltop-bug/

Chociaż
źródło
Rozwiązanie działa z Chrome, Firefox, Safari i IE8 +. Sprawdź ten link, aby uzyskać więcej szczegółów quirksmode.org/dom/w3c_cssom.html
Tho
1
@luochenhuan, właśnie naprawiłem przykładowy kod, używając „document.scrollingElement” zamiast „document.body”, patrz wyżej
David Avsajanishvili
58

Wdrożenie Vanilla JS:

element.scrollIntoView(false);

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

shmuli
źródło
3
z jQuery $ ('# id') [0] .scrollIntoView (false);
alexoviedo999
4
w tej chwili jest to tylko Firefox
tim-we
Działa teraz w nowszych wersjach Chrome, ale niektóre dodatkowe opcje (takie jak płynne przewijanie) nie wydają się jeszcze zaimplementowane.
Matt Zukowski,
Dodałem pusty div na końcu strony i użyłem identyfikatora div. Działał idealnie.
Nisba
5
Jeszcze lepiej:element.scrollIntoView({behavior: "smooth"});
blalond
26

Możesz użyć tego, aby przejść w dół strony w formacie animacji.

$('html,body').animate({scrollTop: document.body.scrollHeight},"fast");
użytkownik5978325
źródło
23

Poniżej powinno być rozwiązanie dla wielu przeglądarek. Został przetestowany na Chrome, Firefox, Safari i IE11

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

window.scrollTo (0, document.body.scrollHeight); nie działa w przeglądarce Firefox, przynajmniej dla przeglądarki Firefox 37.0.2

PixelsTech
źródło
1
To czyni pracę Firefox 62.0.3, ale nie mam pojęcia, kiedy ustalona, że.
zb226,
12

Czasami strona rozciąga się na przewijanie do buttom (na przykład w sieciach społecznościowych), aby przewinąć w dół do końca (ostateczny buttom strony) Używam tego skryptu:

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

A jeśli jesteś w konsoli javascript przeglądarki, warto zatrzymać przewijanie, więc dodaj:

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

A potem użyj stopScroll(); .

Jeśli chcesz przewinąć do określonego elementu, użyj:

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

Lub uniwersalny skrypt do automatycznego przewijania do określonego elementu (lub zatrzymaj interwał przewijania strony):

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);
Konard
źródło
let size = ($ („div [class * = 'card-inserted']”)). length; ($ ("div [klasa * = 'włożona karta']")) [rozmiar -1] .scrollIntoView ();
nobjta_9x_tq
11

Możesz użyć tej funkcji, gdziekolwiek chcesz ją wywołać:

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

}

jquery.com: ScrollTo

NrNazifi
źródło
Dla mnie document.getElementById('copyright').scrollTop += 10nie działa (w najnowszym Chrome) ... pozostaje zero ...
Kyle Baker
10

możesz to zrobić również dzięki animacji, jest to bardzo proste

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

nadzieja pomaga, dziękuję

Ricardo Vieira
źródło
7

jedna wkładka do płynnego przewijania w dół

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

Aby przewinąć w górę, po prostu ustaw topna0

TLJ
źródło
4

Możesz dołączyć dowolny iddo atrybutu referencyjnego hrefelementu link:

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

W powyższym przykładzie, gdy użytkownik kliknie Click meu dołu strony, nawigacja nawiguje do Click mesiebie.

RegarBoy
źródło
Nie dotyczyło mnie to, ponieważ zmienia adres URL, a następnie moja aplikacja kątowa przekierowuje na coś innego!
heman123
3

Możesz wypróbować Gentle Anchors niezłą wtyczkę javascript.

Przykład:

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

Zgodność Testowane na:

  • Mac Firefox, Safari, Opera
  • Windows Firefox, Opera, Safari, Internet Explorer 5.55+
  • Linux nie przetestowany, ale przynajmniej powinien działać z Firefoksem
Ahsan Khurshid
źródło
3

Późno na imprezę, ale oto prosty kod tylko javascript, aby przewinąć dowolny element na dół:

function scrollToBottom(e) {
  e.scrollTop = e.scrollHeight - e.getBoundingClientRect().height;
}
ShortFuse
źródło
3

Aby przewinąć w dół w Selenium użyj poniższego kodu:

Do dołu rozwijanego menu przewiń do wysokości strony. Użyj poniższego kodu javascript, który działałby dobrze zarówno w JavaScript, jak i React.

JavascriptExecutor jse = (JavascriptExecutor) driver; // (driver is your browser webdriver object) 
jse.executeScript("window.scrollBy(0,document.body.scrollHeight || document.documentElement.scrollHeight)", "");
Ankit Gupta
źródło
3

Tak wiele odpowiedzi próbuje obliczyć wysokość dokumentu. Ale dla mnie to nie obliczało poprawnie. Oba działały jednak:

jquery

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

lub po prostu js

    window.scrollTo(0,9999);
Andrzej
źródło
LOL „pracował”. Co jeśli dokument jest dłuższy niż 9999?
Dan Dascalescu
1
@DanDascalescu 99999
Andrew
2

Oto moje rozwiązanie:

 //**** 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)
Iamma Iamma
źródło
Co się tam w ogóle dzieje? Czy wyjaśnisz swoje rozwiązanie? Odpowiedzi zawierające tylko kod są odradzane.
Dan Dascalescu
0

Zagwarantuje to przewinięcie w dół

Kody Głowy

<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>

Kod ciała

<a href="javascript:void(0);" onmouseover="scrollToBottom();" title="Scroll to Bottom">&#9660; Bottom &#9660;</a>
SeekLoad
źródło
0

Obraz jest wart tysiąca słów:

Kluczem jest:

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

Używa document.documentElement, czyli <html>elementu. To jest tak jak z użyciem window, ale to tylko moje osobiste preferencje, aby zrobić to w ten sposób, bo jeśli to nie jest cała strona, ale pojemnik, to działa podobnie jak ten z wyjątkiem chcesz zmienić document.bodyi document.documentElementdodocument.querySelector("#container-id") .

Przykład:

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;
}

Możesz porównać różnicę, jeśli nie ma scrollTo():

niepolarność
źródło
0

Prosty sposób, jeśli chcesz przewinąć w dół określony element

Wywołaj tę funkcję, gdy chcesz przewinąć w dół.

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>

Shrroy
źródło
To nie jest proste i wymaga utworzenia scrollelementu.
Dan Dascalescu
@DanDascalescu Masz rację! ale mój kod działa, nie sądzę, aby zasługiwał na głos
Shrroy
„Działa” to za mało. Wszystkie rozwiązania na tej stronie „do pewnego stopnia” działają. I jest ich mnóstwo. Jak powinien zdecydować czytelnik?
Dan Dascalescu
0

Mam aplikację Angular z dynamiczną treścią i wypróbowałem kilka powyższych odpowiedzi z niewielkim sukcesem. Dostosowałem odpowiedź @ Konard i sprawiłem, że działała w zwykłym JS dla mojego scenariusza:

HTML

<div id="app">
    <button onClick="scrollToBottom()">Scroll to Bottom</button>
    <div class="row">
        <div class="col-md-4">
            <br>
            <h4>Details for Customer 1</h4>
            <hr>
            <!-- sequence Id -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="ID">
            </div>
            <!-- name -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Name">
            </div>
            <!-- description -->
            <div class="form-group">
                <textarea type="text" style="min-height: 100px" placeholder="Description" ></textarea>
            </div>
            <!-- address -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Address">
            </div>
            <!-- postcode -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Postcode">
            </div>
            <!-- Image -->
            <div class="form-group">
                <img style="width: 100%; height: 300px;">
                <div class="custom-file mt-3">
                    <label class="custom-file-label">{{'Choose file...'}}</label>
                </div>
            </div>
            <!-- Delete button -->
            <div class="form-group">
                <hr>
                <div class="row">
                    <div class="col">
                        <button class="btn btn-success btn-block" data-toggle="tooltip" data-placement="bottom" title="Click to save">Save</button>
                        <button class="btn btn-success btn-block" data-toggle="tooltip" data-placement="bottom" title="Click to update">Update</button>
                    </div>
                    <div class="col">
                        <button class="btn btn-danger btn-block" data-toggle="tooltip" data-placement="bottom" title="Click to remove">Remove</button>
                    </div>
                </div>
                <hr>
            </div>
        </div>
    </div>
</div>

CSS

body {
    background: #20262E;
    padding: 20px;
    font-family: Helvetica;
}

#app {
    background: #fff;
    border-radius: 4px;
    padding: 20px;
    transition: all 0.2s;
}

JS

function scrollToBottom() {
    scrollInterval;
    stopScroll;

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

    var stopScroll = setInterval(function () {
        clearInterval(scrollInterval);
    }, 100);
}

Testowany na najnowszej przeglądarce Chrome, FF, Edge i standardowej przeglądarce Android. Oto skrzypce:

https://jsfiddle.net/cbruen1/18cta9gd/16/

Ciaran Bruen
źródło
-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();
amachree tamunoemi
źródło
-1

window.scrollTo (0,1e10);

zawsze działa.

1e10 to duża liczba. więc to zawsze koniec strony.

Timar Ivo Batis
źródło
-1

Jeśli ktoś szuka Angulara

wystarczy przewinąć w dół i dodać to do div

 #scrollMe [scrollTop]="scrollMe.scrollHeight"

   <div class="my-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
   </div>
Akitha_MJ
źródło