Прокрутите автоматически до нижней части страницы

415

Считай, у меня есть список вопросов. Когда я нажимаю на первый вопрос, он автоматически переводит меня в конец страницы.

На самом деле, я знаю, что это можно сделать с помощью jQuery.

Итак, не могли бы вы предоставить мне некоторую документацию или ссылки, где я могу найти ответ на этот вопрос?

РЕДАКТИРОВАТЬ: необходимо прокрутить до определенного элемента HTML в нижней части страницы

джэт
источник
здесь :: stackoverflow.com/questions/4249353/…
Судхир Бастакоти

Ответы:

808

JQuery не является необходимым. Большинство главных результатов, которые я получил от поиска Google, дали мне этот ответ:

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

Там, где у вас есть вложенные элементы, документ может не прокручиваться. В этом случае вам нужно нацелиться на элемент, который прокручивается, и вместо этого использовать его высоту прокрутки.

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

Вы можете связать это с onclickсобытием вашего вопроса (то есть <div onclick="ScrollToBottom()" ...).

Некоторые дополнительные источники, на которые вы можете взглянуть:

Zhihao
источник
29
Не работал для меня Я сделал это: element.scrollTop = element.scrollHeight.
Esamo
7
4 мая 2016 г. Обратите внимание, что функция scrollTo является экспериментальной и работает не во всех браузерах.
августа
1
scrollto не работал в моем браузере, я наткнулся на эту ссылку ниже stackoverflow.com/questions/8917921/…, которая очень полезна, потому что решения работают во всех браузерах, которые я пробовал.
user3655574
для отдельного элемента это рабочее решение: 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;
}

И вот как это работает:

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

Ref: 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
То,
1
@luochenhuan, я только что исправил пример кода, используя «document.scrollingElement» вместо «document.body», см. выше
Дэвид Авсаджанишвили
58

Реализация Vanilla JS:

element.scrollIntoView(false);

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

shmuli
источник
3
с помощью jQuery $ ('# id') [0] .scrollIntoView (false);
alexoviedo999
4
на данный момент это только Firefox
Tim-
Теперь работает в более новых версиях Chrome, но некоторые дополнительные опции (например, плавная прокрутка) пока не реализованы.
Мэтт Жуковски
Я добавил пустой div в конце страницы и использовал id этого div. Работал отлично.
Нисба
5
Еще лучше:element.scrollIntoView({behavior: "smooth"});
blalond
26

Вы можете использовать это, чтобы перейти вниз по странице в формате анимации.

$('html,body').animate({scrollTop: document.body.scrollHeight},"fast");
user5978325
источник
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

PixelsTech
источник
1
Это делает работу в Firefox 62.0.3, но я не имею ни малейшего представления, когда они установили , что.
zb226
12

Иногда страница расширяется при прокрутке до кнопки (например, в социальных сетях), чтобы прокрутить вниз до конца (конечная кнопка страницы), я использую этот скрипт:

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);
Konard
источник
let size = ($ ("div [class * = 'вставлена ​​карта']")). length; ($ ("div [class * = 'вставлена ​​карта']")) [size -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

NrNazifi
источник
Для меня 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

TLJ
источник
4

Вы можете прикрепить любой idатрибут hrefссылки к элементу ссылки:

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

В приведенном выше примере, когда пользователь щелкает Click meвнизу страницы, навигация перемещается Click meсама к себе.

RegarBoy
источник
Это не для меня, потому что это меняет 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

Для прокрутки вниз в Selenium используйте код ниже:

До нижнего выпадающего списка прокрутите до высоты страницы. Используйте приведенный ниже код 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>
SeekLoad
источник
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():

nonopolarity
источник
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>

Shrroy
источник
Это не просто , и требует создания 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

window.scrollTo (0,1e10);

всегда работает.

1e10 - это большое число. так что это всегда конец страницы.

Тимар Иво Батис
источник
-1

Если кто-то ищет Angular

вам просто нужно прокрутить вниз, чтобы добавить это к вашему div

 #scrollMe [scrollTop]="scrollMe.scrollHeight"

   <div class="my-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
   </div>
Akitha_MJ
источник