Прокрутіть автоматично до нижньої частини сторінки


415

Подумайте, у мене є список питань. Коли я натискаю на перше запитання, воно автоматично перенесе мене внизу сторінки.

Власне кажучи, я знаю, що це можна зробити за допомогою jQuery.

Тож чи можете ви надати мені якусь документацію чи деякі посилання, де я можу знайти відповідь на це питання?

РЕДАКТУВАННЯ: Вам потрібно перейти до певного HTML- елемента внизу сторінки


Відповіді:


807

jQuery не потрібен. Більшість найкращих результатів, отриманих від пошуку в Google, дали мені цю відповідь:

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

Там, де ви вклали елементи, документ може не прокручуватися. У цьому випадку вам потрібно націлити елемент, який прокручується, а замість цього використовувати його висоту прокрутки.

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

Ви можете прив'язати це до onclickподії вашого запитання (тобто <div onclick="ScrollToBottom()" ...).

Деякі додаткові джерела, які ви можете подивитися:


29
Не працювало для мене. Я зробив це: element.scrollTop = element.scrollHeight.
Есамо

7
4 травня 2016 року. Зауважте, що функція "scrollTo" експериментальна і працює не у всіх браузерах.
корграт

1
scrollto не працював у моєму браузері, я натрапив на це посилання нижче stackoverflow.com/questions/8917921/…, що дуже корисно, оскільки рішення працюють у веб-переглядачах, які я намагався.
користувач3655574

для окремого елемента це робоче рішення: document.querySelector (". scrollingContainer"). scrollTo (0, document.querySelector (". scrollingContainer"). scrollHeight);
mPrinC

Можливо, доведеться встановити html, висоту тіла до 100%, щоб прокрутити донизу
Тревер Томпсон,

106

Якщо ви хочете прокрутити всю сторінку донизу:

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

Дивіться зразок на JSFiddle

Якщо ви хочете прокрутити елемент донизу:

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

Ось як це працює:

введіть тут опис зображення

Посилання: scrollTop , scrollHeight , clientHeight

ОНОВЛЕННЯ: Останні версії Chrome (61+) та Firefox не підтримують прокрутку тіла, див. Https://dev.opera.com/articles/fixing-the-scrolltop-bug/


Рішення працює з Chrome, Firefox, Safari та IE8 +. Перегляньте це посилання для більш детальної інформації quirksmode.org/dom/w3c_cssom.html
Tho

1
@luochenhuan, я щойно виправив зразок коду, використовуючи "document.scrollingElement" замість "document.body", див. вище
Девід Авсаянішвілі

58

Реалізація ванільної JS:

element.scrollIntoView(false);

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


3
з jQuery $ ('# id') [0] .scrollIntoView (помилково);
alexoviedo999

4
на даний момент це лише Firefox
tim-we

Зараз працює в нових версіях Chrome, але деякі додаткові параметри (наприклад, плавне прокручування), здається, ще не реалізовані.
Метт Зуковський

Я додав порожній div у кінці сторінки та використав ідентифікатор цього div. Працювали чудово.
Нісба

5
Ще краще:element.scrollIntoView({behavior: "smooth"});
blalond

26

Ви можете використовувати це для переходу на сторінку у форматі анімації.

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

23

Нижче має бути крос-браузерне рішення. Він перевірений на Chrome, Firefox, Safari та IE11

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

window.scrollTo (0, document.body.scrollHeight); не працює на Firefox, принаймні для Firefox 37.0.2


1
Це робить роботу в Firefox 62.0.3, але я не маю ні найменшого уявлення, коли вони встановили , що.
zb226

12

Іноді сторінка поширюється на прокрутку до buttom (наприклад, у соціальних мережах), щоб прокрутити вниз до кінця (кінцева деталь сторінки), я використовую цей сценарій:

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

А якщо ви перебуваєте в консолі JavaScript браузера, може бути корисним можливість зупинити прокрутку, тому додайте:

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

А потім використовувати stopScroll(); .

Якщо вам потрібно перейти до конкретного елемента, використовуйте:

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

Або універсальний скрипт для автоматичного прокручування до певного елемента (або інтервал прокрутки сторінки):

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

нехай розмір = ($ ("div [class * = 'картка вставлена']")). довжина; ($ ("div [class * = 'картка вставлена']")) [розмір -1] .scrollIntoView ();
nobjta_9x_tq

11

Ви можете використовувати цю функцію де завгодно, щоб викликати її:

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

}

jquery.com: ScrollTo


Для мене document.getElementById('copyright').scrollTop += 10не працює (в останніх Chrome) ... залишається нуль ...
Кайл Бейкер

10

ви можете зробити це теж за допомогою анімації, її дуже просто

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

сподівання допомагає, дякую


7

один вкладиш, щоб плавно прокрутити донизу

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

Для прокручування вгору просто встановіть topзначення0


4

Ви можете прикріпити будь- idякий посилання на атрибут hrefелемента посилання:

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

У наведеному вище прикладі, коли користувач клацає Click meвнизу сторінки, навігація переходить до Click meсебе.


Це не для мене, тому що він змінює URL-адресу, а потім мій кутовий додаток перенаправляє на щось інше!
heman123

3

Ви можете спробувати Gentle Anchors приємний плагін JavaScript.

Приклад:

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

Сумісність випробувана на:

  • Mac Firefox, Safari, Opera
  • Windows Firefox, Opera, Safari, Internet Explorer 5.55+
  • Linux не перевірений, але має бути добре з Firefox принаймні

3

Пізно на вечірку, але ось простий код, який лише для JavaScript, прокручує будь-який елемент донизу:

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

3

Для прокручування вниз у селені використовуйте нижче код:

До нижнього спаду вниз, прокрутіть до висоти сторінки. Використовуйте наведений нижче код JavaScript, який би справно працював і в JavaScript, і в React.

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

3

Стільки відповідей намагаються обчислити висоту документа. Але для мене це було не правильно. Однак обидва працювали:

jquery

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

або просто js

    window.scrollTo(0,9999);

LOL "працював". Що робити, якщо документ довший 9999?
Дан Даскалеску

1
@DanDascalescu 99999
Андрій

2

Ось моє рішення:

 //**** 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)

Що ... навіть там відбувається? Хочете пояснити своє рішення? Відповіді, що стосуються лише коду, не враховують.
Дан Даскалеску

0

Це гарантує прокручування донизу

Головні коди

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

Код тіла

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

0

Малюнок вартує тисячі слів:

Ключ:

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

Це використання document.documentElement, яке є <html>елементом. Це так само, як використовувати window, але це моє особисте вподобання робити це саме так, бо якщо це не вся сторінка, а контейнер, вона працює так само, крім того, що ви змінили б document.bodyі document.documentElementзробити document.querySelector("#container-id").

Приклад:

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

Ви можете порівняти різницю, якщо її немає scrollTo():


0

Простий спосіб, якщо ви хочете прокрутити вниз конкретний елемент

Викликайте цю функцію, коли потрібно прокрутити вниз.

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>


Це не просто і вимагає створення scrollелемента.
Дан Даскалеску

@DanDascalescu Ви маєте рацію! але мій код працює, я не думаю, що він заслуговує на голосування
Шррой

"Працює" недостатньо. Всі рішення на цій сторінці "працюють" певною мірою. І є тонна їх. Як повинен вирішити читач?
Дан Даскалеску

0

У мене є програма Angular з динамічним контентом, і я спробував декілька перерахованих вище відповідей з не великим успіхом. Я адаптував відповідь @ Конарда і змусив її працювати в простому JS для мого сценарію:

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

Тестовано на останніх веб-переглядачах Chrome, FF, Edge та Android. Ось загадка:

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


-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

Якщо хтось шукає Angular

вам просто потрібно прокрутити вниз, додайте це до свого діва

 #scrollMe [scrollTop]="scrollMe.scrollHeight"

   <div class="my-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
   </div>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.