Spec-Zone.ru › Web APIs

Элемент: свойство scrollHeight

Базовая линия Широко поддерживается

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2020 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Это Element.scrollHeight свойство, которое показывает высоту содержимого элемента, включая содержимое, невидимое на экране из-за переполнения.

The user's viewport is an element with four regions labeled padding-top, border-top, border-bottom, padding-bottom. The scroll height goes from the container's padding top to the end of the padding bottom, well beyond the top and bottom of the viewport.

Значение scrollHeight равно минимальной высоте, необходимой элементу для размещения всего содержимого в области просмотра без использования вертикальной полосы прокрутки. Высота измеряется так же, как и в clientHeight: она включает отступы элемента, но не границы, отступы или горизонтальную полосу прокрутки (если она есть). Она также может включать высоту псевдоэлементов, таких как ::before или ::after. Если содержимое элемента может поместиться без вертикальной полосы прокрутки, его scrollHeight равно clientHeight

Примечание: Это свойство округляет значение до целого числа. Если вам нужно дробное значение, используйте Element.getBoundingClientRect().

Значение

Целое число, соответствующее значению высоты прокрутки элемента в пикселях.

Проблемы и решения

Определение, полностью ли прокручен элемент

scrollTop — это число без округления, а scrollHeight и clientHeight — округленные, поэтому единственный способ определить, достигнута ли нижняя граница области прокрутки, заключается в проверке, достаточно ли близко значение прокрутки к некоторому порогу (в данном примере 1):

Math.abs(element.scrollHeight - element.clientHeight - element.scrollTop) <= 1;

Следующий код не всегда будет работать, потому что scrollTop может содержать десятичные дроби:

element.scrollHeight - Math.abs(element.scrollTop) === element.clientHeight;

Определение, содержимое элемента выходит за его пределы

Эта функция возвращает логическое значение, указывающее, выходит ли содержимое элемента за пределы его границ:

function isOverflowing(element) {
  return element.scrollHeight > element.clientHeight;
}

Затем вы можете проверить, возможно ли прокрутить его в данном случае:

function isScrollable(element) {
  return (
    isOverflowing(element) &&
    ["scroll", "auto"].includes(window.getComputedStyle(element).overflowY)
  );
}

Примеры

Проверка того, что пользователь прочитал текст

В сочетании с событием scroll это равенство может быть полезно для определения того, прочитал ли пользователь текст или нет (см. также свойства element.scrollTop и element.clientHeight).

Флажок в демонстрации ниже отключён, и поэтому его нельзя установить, чтобы показать согласие, пока содержимое абзаца не будет прокручено. После установки флажка можно нажать кнопку «Далее», чтобы продолжить.

HTML

<form id="form" name="registration">
  <p id="info">Read all text to agree</p>
  <div id="very-important-read">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
      tempor incididunt ut labore et dolore magna aliqua. Feugiat sed lectus
      vestibulum mattis. Id consectetur purus ut faucibus pulvinar elementum
      integer enim neque. Metus vulputate eu scelerisque felis imperdiet. Massa
      massa ultricies mi quis hendrerit dolor magna eget est. Rhoncus aenean vel
      elit scelerisque mauris pellentesque. Volutpat est velit egestas dui id
      ornare arcu. Id cursus metus aliquam eleifend mi in. Condimentum lacinia
      quis vel eros donec ac. Feugiat pretium nibh ipsum consequat nisl vel
      pretium lectus.
    </p>
    <p>
      Sit amet volutpat consequat mauris nunc congue nisi vitae. Viverra
      accumsan in nisl nisi scelerisque. Enim ut tellus elementum sagittis
      vitae. Dolor sed viverra ipsum nunc aliquet bibendum enim facilisis. Nisi
      scelerisque eu ultrices vitae. Sem fringilla ut morbi tincidunt augue
      interdum velit. Senectus et netus et malesuada fames ac turpis egestas.
      Nunc non blandit massa enim nec. At augue eget arcu dictum varius duis at.
      Dictumst quisque sagittis purus sit amet. Ut eu sem integer vitae justo.
      Mollis aliquam ut porttitor leo a diam sollicitudin. Mollis nunc sed id
      semper risus in. Eu volutpat odio facilisis mauris sit. Augue interdum
      velit euismod in pellentesque massa placerat duis. Aliquam faucibus purus
      in massa tempor nec feugiat. Nisl rhoncus mattis rhoncus urna neque
      viverra justo. Leo duis ut diam quam nulla. Ultrices dui sapien eget mi
      proin sed libero enim.
    </p>
    <p>
      Cras adipiscing enim eu turpis egestas. Est ultricies integer quis auctor
      elit. Tempor id eu nisl nunc mi ipsum. Non nisi est sit amet facilisis.
      Nisl suscipit adipiscing bibendum est ultricies integer quis. Habitant
      morbi tristique senectus et netus et malesuada. Etiam erat velit
      scelerisque in dictum non consectetur a erat. Diam sollicitudin tempor id
      eu nisl. Aenean vel elit scelerisque mauris pellentesque pulvinar
      pellentesque habitant. A pellentesque sit amet porttitor. Viverra aliquet
      eget sit amet tellus cras. Eu ultrices vitae auctor eu.
    </p>
    <p>
      Fames ac turpis egestas sed tempus. Id donec ultrices tincidunt arcu non
      sodales. Congue mauris rhoncus aenean vel elit scelerisque mauris
      pellentesque. Velit scelerisque in dictum non consectetur a erat nam.
      Auctor elit sed vulputate mi sit amet mauris commodo. Mauris ultrices eros
      in cursus turpis massa tincidunt. Dui sapien eget mi proin sed libero enim
      sed faucibus. Ipsum dolor sit amet consectetur adipiscing elit
      pellentesque habitant. Amet massa vitae tortor condimentum. Feugiat nisl
      pretium fusce id velit. Malesuada proin libero nunc consequat interdum
      varius sit. Quam nulla porttitor massa id neque aliquam vestibulum morbi
      blandit. Gravida arcu ac tortor dignissim convallis aenean et tortor at.
      Dapibus ultrices in iaculis nunc sed. Fermentum et sollicitudin ac orci
      phasellus egestas tellus. Proin libero nunc consequat interdum varius sit
      amet mattis. Sed viverra ipsum nunc aliquet bibendum.
    </p>
  </div>
  <p>
    <input type="checkbox" id="agree" name="accept" disabled />
    <label for="agree">I agree</label>
    <input type="submit" id="next-step" value="Next" disabled />
  </p>
</form>

CSS

#info {
  margin: 5px;
  display: inline-block;
  font-style: italic;
}

#very-important-read {
  height: 130px;
  padding: 5px;
  border: 2px solid #00b4c5;
  border-radius: 5px;
  overflow: scroll;
}

JavaScript

const info = document.getElementById("info");
const toAgree = document.getElementById("agree");
const toNextStep = document.getElementById("next-step");
const veryImportantRead = document.getElementById("very-important-read");

// Check if user has scrolled the element to the bottom
function isRead(element) {
  return (
    Math.abs(element.scrollHeight - element.clientHeight - element.scrollTop) <=
    1
  );
}

function checkScrollToBottom(element) {
  if (isRead(element)) {
    info.innerText = "You have read all text. Agree to continue.";
    toAgree.disabled = false;
  }
}

toAgree.addEventListener("change", (e) => {
  toNextStep.disabled = !e.target.checked;
});

veryImportantRead.addEventListener("scroll", () => {
  checkScrollToBottom(veryImportantRead);
});

toNextStep.addEventListener("click", () => {
  if (toAgree.checked) {
    toNextStep.value = "Done!";
  }
});

Результат

Спецификации

Спецификация
CSSOM View Module
# dom-element-scrollheight

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
scrollHeight 1 12 21
3–21До Firefox 21, когда содержимое элемента не генерирует вертикальную полосу прокрутки, то свойство scrollHeight равно свойству clientHeight. Это может означать, что содержимое слишком короткое, чтобы потребовалась полоса прокрутки, или что у элемента CSS-стиль overflow со значением visible (непрокручиваемый).
8 1 18 21
4–21До Firefox для Android 21, когда содержимое элемента не генерирует вертикальную полосу прокрутки, то свойство scrollHeight равно свойству clientHeight. Это может означать, что содержимое слишком короткое, чтобы потребовалась полоса прокрутки, или что у элемента CSS-стиль overflow со значением visible (непрокручиваемый).
10.1 1 1.0 4.4

См. также

  • Element.clientHeight
  • HTMLElement.offsetHeight
  • Определение размеров элементов

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API