Как прокрутить скролл у div до низа
Недавно мне надо было создать чат, и передо мной встала задача прокрутки скролла вниз у div, для того чтобы пользователь сразу увидел новое сообщение в чате. Сообщения чата, как Вы уже догадались, находились в div. Большинство программистов прокручивают скролл у div до низа неправильно, а в этой статье я покажу, как делать это с максимально чистым кодом.
Для начала приведу HTML-код:
<div id="block">
<p>Текст</p>
<p>Текст</p>
<p>Текст</p>
<p>Текст</p>
<p>Текст</p>
<p>Текст</p>
</div>
Теперь продемонстрирую CSS-код, который необходим, чтобы появилась полоса прокрутки:
div {
height: 100px;
overflow: auto;
width: 200px;
}
Теперь перейдём к прокрутке скролла у div. Большинство программистов делает так:
<script type="text/javascript">
var block = document.getElementById("block");
block.scrollTop = 9999;
</script>
Безусловно, данный способ рабочий. Но что если размер div огромен? Тогда полоса прокрутки уйдёт не до низа. Можно, конечно, поставить 99999999 и даже больше, но это смотрится ещё хуже. А ведь есть куда более простое и элегантное решение:
<script type="text/javascript">
var block = document.getElementById("block");
block.scrollTop = block.scrollHeight;
</script>
Здесь прокрутка уйдёт до самого низа div независимо от его размеров, плюс нет констант прямо в коде, которые всегда его портят.
И, наконец, его можно использовать не только для div, но и для самой страницы:
<script type="text/javascript">
document.body.scrollTop = document.body.scrollHeight;
</script>
Как видите, всё очень просто. Также данный способ является кроссбраузерным, поэтому можете смело его использовать.
-
- Михаил Русаков
Комментарии (7):
Михаил! А как сделать чтобы в чате если пишет человек два сообщения, то аватар извлекается только при первом сообщении а при втором сообщении будет просто пустое место?
Ответить
if (первый раз) загрузить_аватар.
Ответить
Лучше всё же не overflow: auto; а overflow-y: auto, иначе у вас может чат поехать в ширину при некоторых условиях.
Ответить
Тогда уж лучше: overflow-x: auto overflow-y: auto И вообще, overflow не действует на Chrmoe,Opera,Safari, работает только в лисе да эксплорере.
Ответить
Сделайте div большой высоты и поставьте внутрь него картинку огромной ширины, после чего откройте в хроме. Если у вас стоит overflow: auto или overflow-x: auto он будет прокручиваться как по горизонтали, так и по вертикали. Если значение auto не будет работать в вашем браузере, то overflow: scroll точно сработает. А теперь представьте, что какой-нибудь приколист засунет вам в чат картинку размером 10000x1.
Ответить
Михаил, Здравствуйте. Как можно изменить оформление полосы прокрутки - изменить ширину, использовать другой рисунок вместо "бегунка", поменять его цвет и цвет самой области прокрутки, убрать стрелки ? Спасибо.
Ответить
Максим, с помощью стилей меняются, но с последними изменениями в браузерах, это ничего не действует.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.