scrollHeight в JavaScript — повна висота вмісту елемента


Загальний опис

Властивість scrollHeight є частиною інтерфейсу Element в JavaScript та представляє висоту вмісту елемента, включаючи частину, яка є поза межами видимої області прокрутки. Ця властивість відіграє важливу роль у роботі з прокручуваним вмістом на веб-сторінках, особливо при створенні складних користувацьких інтерфейсів та реалізації функціональності безкінечного скролу.

Значення scrollHeight обчислюється динамічно на основі розмірів вмісту елемента та його дочірніх вузлів. Воно завжди дорівнює або більше за висоту видимої області прокрутки елемента, представленої властивістю clientHeight. Якщо вміст елемента не перевищує видиму область, scrollHeight буде дорівнювати clientHeight.

Розглянемо простий приклад використання scrollHeight:

<div id="container" style="height: 200px; overflow: auto;">
  <p>Цей текст має висоту більшу, ніж видима область прокрутки.</p>
</div>
const container = document.getElementById('container');
console.log(container.scrollHeight); // Виведе висоту вмісту, наприклад, 300
console.log(container.clientHeight); // Виведе висоту видимої області, 200

У цьому прикладі ми маємо контейнер з обмеженою висотою 200 пікселів та вмістом, який перевищує цю висоту. Властивість scrollHeight повертає повну висоту вмісту, яка в даному випадку становить 300 пікселів, тоді як clientHeight повертає висоту видимої області прокрутки, яка дорівнює 200 пікселів.

Властивість scrollHeight часто використовується у поєднанні з іншими властивостями прокрутки, такими як scrollTop та clientHeight, для реалізації функціональності безкінечного скролу або виявлення досягнення кінця вмісту. Наприклад:

const container = document.getElementById('container');
const handleScroll = () => {
  const scrollPosition = container.scrollTop + container.clientHeight;
  if (scrollPosition >= container.scrollHeight) {
    // Користувач досяг кінця вмісту
    loadMoreContent();
  }
};

container.addEventListener('scroll', handleScroll);

У цьому прикладі ми додаємо обробник події scroll до контейнера. Під час прокрутки ми обчислюємо поточну позицію прокрутки (scrollTop + clientHeight) та порівнюємо її з scrollHeight. Якщо ці значення збігаються, це означає, що користувач досяг кінця вмісту, і ми можемо завантажити додатковий вміст, викликавши функцію loadMoreContent().

Властивість scrollHeight також корисна при розробці адаптивних інтерфейсів, коли потрібно динамічно змінювати розміри елементів або їх вміст залежно від розмірів вікна браузера або пристрою. Вона дозволяє точно визначити висоту вмісту елемента, незалежно від його видимості на екрані.

автор: Bond

Порада

Якщо ви використовуєте scrollHeight для визначення розмірів вмісту, переконайтеся, що всі необхідні стилі та зміни вмісту вже застосовані до елемента. Властивість scrollHeight відображає поточний стан вмісту, тому зміни, внесені після її обчислення, не будуть враховані.

автор: Bond
Порада

Якщо ви маєте елемент з фіксованою висотою, але його вміст може змінюватися динамічно, використовуйте scrollHeight для визначення, чи вміст перевищує задану висоту. Це дозволить вам правильно налаштувати область прокрутки або застосувати додаткові стилі.

автор: Bond
Порада

Пам'ятайте, що scrollHeight завжди повертає висоту вмісту, навіть якщо він повністю не відображається на екрані. Це означає, що якщо елемент має overflow: hidden, scrollHeight все одно буде відображати повну висоту вмісту, а не обрізану.

автор: Bond

Синтаксис

Element.scrollHeight

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 21 1 8 12 5
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 21 1

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми виводимо значення властивості scrollHeight для елемента <div> з деяким текстом. Це може бути корисним для перевірки, чи елемент має вміст, що виходить за межі видимої області.

HTML

<div id="myDiv" class="scroll-demo">
    <div class="scroll-inner">Прокручуваний вміст</div>
</div>

CSS

.scroll-demo {
    width: 220px;
    height: 110px;
    overflow: auto;
    border: 1px solid #0172ad;
}

.scroll-inner {
    width: 600px;
    height: 400px;
    background: linear-gradient(135deg, #eef6ff, #0172ad);
    padding: 8px;
}

JS

const div = document.getElementById('myDiv');
const height = div.scrollHeight;
console.log(`Висота елемента з урахуванням прокрутки: ${height}px`);
автор: Bond

У цьому прикладі ми маємо елемент <div> з ідентифікатором content, який містить великий текст, що не поміщається у видимій області. Ми обмежуємо висоту елемента до 200px і додаємо прокрутку за допомогою CSS-властивості overflow: auto.

HTML

<header>
  <h2 class="title">Element: scrollHeight property</h2>
  <p class="description">Повертає висоту елемента, включаючи частину, що не видима через обмеження розміру або наявність прокрутки.</p>
</header>
<main>
  <div class="result">
    <div id="content" style="height: 200px; overflow: auto;">
      <p>Це великий текст, який не поміщається у видимій області елемента. Прокрутіть вниз, щоб побачити більше вмісту.</p>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed auctor, nisl nec ultricies tincidunt, nisl nisl aliquam nisl, eget aliquam nisl nisl eget nisl. Sed auctor, nisl nec ultricies tincidunt, nisl nisl aliquam nisl, eget aliquam nisl nisl eget nisl.</p>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed auctor, nisl nec ultricies tincidunt, nisl nisl aliquam nisl, eget aliquam nisl nisl eget nisl. Sed auctor, nisl nec ultricies tincidunt, nisl nisl aliquam nisl, eget aliquam nisl nisl eget nisl.</p>
    </div>
    <p>Висота елемента з урахуванням прокрутки: <span id="scrollHeight"></span></p>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

JS

const content = document.getElementById('content');
const scrollHeightElement = document.getElementById('scrollHeight');

function updateScrollHeight() {
  scrollHeightElement.textContent = `${content.scrollHeight}px`;
}

content.addEventListener('scroll', updateScrollHeight);
updateScrollHeight();
//# sourceURL=pen.js
автор: Bond

У цьому прикладі ми використовуємо властивість scrollHeight для елемента document.documentElement (корінь документа), щоб визначити загальну висоту сторінки з урахуванням прокрутки. Ми також отримуємо поточну позицію прокрутки (scrollTop) та висоту видимої області (clientHeight). Коли сума scrollTop та clientHeight досягає scrollHeight, ми викликаємо функцію loadMoreContent(), яка додає новий вміст на сторінку.

HTML

<div id="content" class="scroll-demo">
    <div class="scroll-inner">Прокручуваний вміст</div>
</div>

CSS

.scroll-demo {
    width: 220px;
    height: 110px;
    overflow: auto;
    border: 1px solid #0172ad;
}

.scroll-inner {
    width: 600px;
    height: 400px;
    background: linear-gradient(135deg, #eef6ff, #0172ad);
    padding: 8px;
}

JS

const content = document.getElementById('content');
let currentPage = 1;

function loadMoreContent() {
  // Симулюємо завантаження вмісту з сервера
  const newContent = `<p>Це новий контент зі сторінки ${currentPage}</p>`;
  content.insertAdjacentHTML('beforeend', newContent);
  currentPage++;
}

window.addEventListener('scroll', function() {
  const scrollHeight = document.documentElement.scrollHeight;
  const scrollTop = document.documentElement.scrollTop;
  const clientHeight = document.documentElement.clientHeight;

  if (scrollTop + clientHeight >= scrollHeight) {
    loadMoreContent();
  }
});
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід