Я создаю чат, используя ajax-запросы в rails, и пытаюсь получить div для прокрутки до дна без особой удачи.
Я оборачиваю все в этом div:
#scroll {
height:400px;
overflow:scroll;
}
Есть ли способ сохранить прокрутку вниз по умолчанию с помощью JS?
Есть ли способ сохранить прокрутку вниз после запроса ajax?
javascript
html
ajax
DMIX
источник
источник
Это намного проще, если вы используете jQuery scrollTop :
источник
$("#mydiv").scrollTop(function() { return this.scrollHeight; });
Вы можете использовать следующий код:
Чтобы выполнить плавную прокрутку с помощью JQuery:
Смотрите пример на JSFiddle
Вот почему это работает:
Ref: scrollTop , scrollHeight , clientHeight
источник
используя jQuery animate :
источник
Работает с JQuery 1.6
https://api.jquery.com/scrollTop/
http://api.jquery.com/prop/
источник
Более новый метод, который работает во всех текущих браузерах :
источник
плавная прокрутка с помощью Javascript:
document.getElementById('messages').scrollIntoView({ behavior: 'smooth', block: 'end' });
источник
Если вы не хотите полагаться
scrollHeight
, поможет следующий код:источник
1E10
). Меньшее число работИспользуя jQuery, scrollTop используется для установки вертикальной позиции полосы прокрутки для любого данного элемента. есть также хороший плагин jquery scrollTo, используемый для прокрутки с анимацией и различными опциями ( демонстрациями )
Если вы хотите использовать анимационный метод jQuery для добавления анимации при прокрутке вниз, проверьте следующий фрагмент:
источник
Я столкнулся с той же проблемой, но с дополнительным ограничением: у меня не было контроля над кодом, добавляющим новые элементы в контейнер прокрутки. Ни один из приведенных здесь примеров не позволил мне сделать именно это. Вот решение, которое я выбрал.
Он использует
Mutation Observers
( https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ), что позволяет использовать его только в современных браузерах (хотя существуют многозаполнения)Так что в основном код делает именно это:
Я сделал скрипку, чтобы продемонстрировать концепцию: https://jsfiddle.net/j17r4bnk/
источник
<div class="abc"><div data-bind=attr : {'id': myId } ></div></div>
В этом коде myId является переменной. Как я могу получить доступ к этому идентификатору в скрипте.Javascript или JQuery:
Css:
источник
Нашел это действительно полезным, спасибо.
Для пользователей Angular 1.X:
Просто потому, что перенос элементов jQuery по сравнению с HTML-элементами DOM немного сбивает с толку angular.
Также для приложения чата было полезно сделать это назначение после того, как ваши чаты были загружены, вам также может понадобиться короткое время ожидания.
источник
small addendum: прокручивается только, если последняя строка уже видна. если прокрутить чуть-чуть, оставляет содержимое там, где оно есть (внимание: не тестируется с разными размерами шрифта. это может потребовать некоторых настроек внутри "> = сравнения"):
источник
Так же, как бонусный фрагмент. Я использую angular и пытался прокрутить ветку сообщений до конца, когда пользователь выбирал разные разговоры с пользователями. Чтобы убедиться, что прокрутка работает после того, как новые данные были загружены в div с ng-repeat для сообщений, просто оберните фрагмент прокрутки в тайм-аут.
Это обеспечит запуск события прокрутки после вставки данных в DOM.
источник
setTimeout(function() { ... }, n)
Вы также можете, используя jQuery, прикрепить анимацию к
html,body
документу через:$("html,body").animate({scrollTop:$("#div-id")[0].offsetTop}, 1000);
что приведет к плавной прокрутке к началу div с идентификатором "div-id".
источник
Java Script:
document.getElementById('messages').scrollIntoView(false);
Прокрутка до последней строки содержимого.
источник
Это позволит вам прокручивать всю страницу вниз по высоте документа.
источник
Очень простой способ для этого - установить
scroll to
высоту div.источник
Прокрутите до последнего элемента внутри div:
источник
В моем приложении Angular 6 я просто сделал это:
Функция clearInterval (интервал) остановит таймер, чтобы разрешить ручную прокрутку вверх / вниз.
источник
Мой сценарий: у меня был список строк, в который мне нужно было добавить строку, заданную пользователем, и автоматически прокрутить до конца списка. Я зафиксировал высоту отображения списка, после чего он должен был переполниться.
Я попробовал ответ @ Джереми Рутена, он работал, но он переходил к (n-1) -ому элементу. Если кто-то сталкивается с такой проблемой, вы можете использовать
setTimeOut()
метод обхода. Вам нужно изменить код ниже:Вот ссылка на StcakBlitz, которую я создал, которая показывает проблему и ее решение: https://stackblitz.com/edit/angular-ivy-x9esw8
источник
Я знаю, что это старый вопрос, но ни одно из этих решений не сработало для меня. В итоге я использовал offset (). Top, чтобы получить желаемые результаты. Вот что я использовал, чтобы аккуратно прокрутить экран до последнего сообщения в моем приложении чата:
Я надеюсь, что это помогает кому-то еще.
источник
Иногда самое простое - это лучшее решение: я не знаю, поможет ли это, оно помогло мне прокрутить, когда я тоже хотел. Чем выше значение «y =», тем больше он прокручивается вниз и, конечно, «0» означает «верх», поэтому, например, «1000» может быть нижним, «2000» или «3000» и т. Д., В зависимости от того, как долго ваш страница есть. Это обычно работает в кнопках с onclick или onmouseover.
источник
Установите расстояние от верхней части прокручиваемого элемента до полной высоты элемента.
источник
Вы можете использовать метод HTML DOM scrollIntoView следующим образом:
источник
использовать:
или проверьте прокрутку вниз:
источник
Если это делается для прокрутки до нижней части окна чата, выполните следующие действия.
Идея прокрутки до определенного div в чате была следующей
1) Каждый div чата, состоящий из Person, времени и сообщения, запускается в цикле for с классом chatContentbox
2) querySelectorAll находит все такие массивы. Это может быть 400 узлов (400 чатов)
3) перейти к последнему
4) scrollIntoView ()
источник
scrollIntoView
, так что нет необходимости добавлять еще один.