Прокрутить до нижней части div? - PullRequest
706 голосов
/ 07 ноября 2008

Я создаю чат, используя ajax-запросы в rails, и пытаюсь получить div для прокрутки до дна без особой удачи.

Я упаковываю все в этот div:

#scroll {
    height:400px;
    overflow:scroll;
}

Есть ли способ сохранить прокрутку вниз по умолчанию с помощью JS?

Есть ли способ сохранить прокрутку вниз после запроса ajax?

Ответы [ 20 ]

1159 голосов
/ 07 ноября 2008

Вот что я использую на своем сайте:

var objDiv = document.getElementById("your_div");
objDiv.scrollTop = objDiv.scrollHeight;
336 голосов
/ 19 апреля 2010

Это намного проще, если вы используете jQuery scrollTop :

$("#mydiv").scrollTop($("#mydiv")[0].scrollHeight);
89 голосов
/ 12 сентября 2012

с использованием jQuery animate :

$('#DebugContainer').stop().animate({
  scrollTop: $('#DebugContainer')[0].scrollHeight
}, 800);
81 голосов
/ 18 октября 2015

Вы можете использовать следующий код:

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

Чтобы выполнить плавную прокрутку с помощью JQuery:

function scrollSmoothToBottom (id) {
   var div = document.getElementById(id);
   $('#' + id).animate({
      scrollTop: div.scrollHeight - div.clientHeight
   }, 500);
}

См. пример на JSFiddle

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

enter image description here

Ref: scrollTop , scrollHeight , clientHeight

36 голосов
/ 10 января 2014
var mydiv = $("#scroll");
mydiv.scrollTop(mydiv.prop("scrollHeight"));

Работает с jQuery 1.6

https://api.jquery.com/scrollTop/

http://api.jquery.com/prop/

24 голосов
/ 10 октября 2014

Более новый метод, который работает на всех текущих браузерах :

this.scrollIntoView(false);
10 голосов
/ 10 июня 2014

Если вы не хотите полагаться на scrollHeight, вам поможет следующий код:

$('#scroll').scrollTop(1000000);
6 голосов
/ 19 ноября 2014

Используя jQuery, scrollTop используется для установки вертикальной позиции полосы прокрутки для любого данного элемента. есть также хороший плагин jquery scrollTo , используемый для прокрутки с анимацией и различными опциями ( demos )

var myDiv = $("#div_id").get(0);
myDiv.scrollTop = myDiv.scrollHeight;

если вы хотите использовать метод анимации jQuery для добавления анимации при прокрутке вниз, проверьте следующий фрагмент:

var myDiv = $("#div_id").get(0);
myDiv.animate({
    scrollTop: myDiv.scrollHeight
  }, 500);
5 голосов
/ 15 сентября 2015

Нашел это действительно полезным, спасибо.

Для пользователей Angular 1.X:

angular.module('myApp').controller('myController', ['$scope', '$document',
  function($scope, $document) {

    var overflowScrollElement = $document[0].getElementById('your_overflow_scroll_div');
    overflowScrollElement[0].scrollTop = overflowScrollElement[0].scrollHeight;

  }
]);

Просто потому, что перенос элементов jQuery по сравнению с элементами HTML DOM немного сбивает с толку angular.

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

4 голосов
/ 18 июля 2016

Javascript или JQuery:

var scroll = document.getElementById('messages');
   scroll.scrollTop = scroll.scrollHeight;
   scroll.animate({scrollTop: scroll.scrollHeight});

Css:

 .messages
 {
      height: 100%;
      overflow: auto;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...