ArtemEfremov
@ArtemEfremov

Почему не прокручивается блок, если добавить в него содержимое через innerHTML?

Есть блок с прокруткой содержимого. Когда в ручную вписываю в этот блок много текста — прокрутка работает.
document.getElementById('test-div').innerHTML = "и тут много HTML кода"; // тут действительно много кода по идее.

Но когда делаю вот это, блок не прокручивается. А в итоге прокручивается вся страница.
  • Вопрос задан
  • 340 просмотров
Решения вопроса 1
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
Когда ты добавляешь содержимое в тело документа, то в данном случае увеливаешь его высоту. Документа. Более того, при добавлении контента, происходит его загрузка и отрисовка, в основном картинок, поэтому увеличение документа скорее всего происходит не одним скачком. Никакого события скролла не происходит (не проверял), просто увеличивается документ и пропорционально ему скроллбар.

Чтобы держать пользователя по нижней границе загружаемого контента, при загрузке слушай изменение высоты документа и запускай прокрутку к последнему элементу, который приходит. Либо узнавай его высоту, получай коры и высчитывай размер вьбюпорта и туда скролль.

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

Поэтому надо поработать над таймингов и логикой отрисовки.

В принципе стоит подумать над логикой отрисовки, ничего, собсно не мешает аппендить узлы в цикле и к каждому сбрасывать скролл.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы