Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

JS властивість Element.offsetTop

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

offsetTop - це властивість об'єкта Element, яка повертає відстань у пікселях між верхнім краєм елемента та верхнім краєм найближчого батьківського елемента, що має властивість position зі значенням relative, absolute або sticky. Якщо такого батьківського елемента немає, то offsetTop вимірюється відносно документа. Ця властивість корисна для визначення точного розташування елемента стосовно видимої області документа або інших елементів.

Для отримання значення offsetTop елемента потрібно звернутися до відповідної властивості об'єкта HTMLElement. Наприклад, для елемента з id="myElement" можна використати document.getElementById("myElement").offsetTop. Це повернеться числове значення у пікселях.

Властивість offsetTop часто використовується для реалізації різноманітних ефектів прокрутки, таких як "липкі" елементи, паралакс-ефект або анімація прокрутки. Наприклад, можна створити елемент, який "прилипає" до верхньої частини вікна під час прокрутки:

window.addEventListener("scroll", function() {
  const header = document.querySelector("header");
  if (window.pageYOffset > header.offsetTop) {
    header.classList.add("sticky");
  } else {
    header.classList.remove("sticky");
  }
});

У цьому прикладі ми спостерігаємо за подією scroll на об'єкті window. Коли значення window.pageYOffset (відстань прокрутки від верху сторінки) стає більшим за header.offsetTop (відстань від верху сторінки до елемента header), ми додаємо клас sticky до елемента header, що дозволяє застосувати відповідні стилі CSS для "прилипання" елемента.

offsetTop також можна використовувати для визначення, чи є елемент видимим у вікні перегляду. Наприклад:

function isElementInViewport(el) {
  const rect = el.getBoundingClientRect();
  return (
    rect.top >= 0 &&
    rect.left >= 0 &&
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.right <= (window.innerWidth || document.documentElement.clientWidth)
  );
}

const myElement = document.getElementById("myElement");
if (isElementInViewport(myElement)) {
  // Елемент видимий у вікні перегляду
}

У цьому прикладі функція isElementInViewport перевіряє, чи знаходиться елемент el у межах видимої області вікна перегляду, використовуючи метод getBoundingClientRect та властивості offsetTop та offsetLeft. Якщо елемент видимий, можна виконати відповідні дії.

Підсумовуючи, offsetTop є корисною властивістю для визначення точного розташування елементів на веб-сторінці та реалізації різноманітних ефектів прокрутки та анімацій на основі цієї інформації.

Порада:

Комбінуйте offsetTop з іншими властивостями, такими як offsetLeft, offsetWidth та offsetHeight, для отримання повної інформації про розміри та положення елемента. Це може бути корисним для реалізації складних макетів або динамічних ефектів.

const element = document.getElementById('myElement');
const rect = {
  top: element.offsetTop,
  left: element.offsetLeft,
  width: element.offsetWidth,
  height: element.offsetHeight
};
Порада:

Пам'ятайте, що offsetTop вимірюється відносно найближчого батьківського елемента з position: relative, position: absolute або position: sticky. Якщо такого батьківського елемента немає, то offsetTop вимірюється відносно документа. Це важливо враховувати при роботі з вкладеними елементами або при використанні різних схем позиціонування.

Порада:

Для перевірки, чи елемент видимий у вікні перегляду, використовуйте offsetTop разом з іншими властивостями, такими як window.innerHeight або document.documentElement.clientHeight. Це дозволить визначити, чи потрібно виконувати певні дії залежно від видимості елемента.

function isElementInViewport(el) {
  const rect = el.getBoundingClientRect();
  return (
    rect.top >= 0 &&
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)
  );
}

Синтаксис

Element.offsetTop

Значення

Return

Переглядачі

Переглядач

1

1

3

8

12

Переглядач

4.4

18

4

1

Переглядач

-

-

Приклади


У цьому прикладі демонструється використання властивості offsetTop для відстеження відстані між верхнім краєм елемента div з id="box" та верхнім краєм його найближчого позиціонованого батьківського елемента div з id="container". Елемент div з id="box" має position: absolute, що дозволяє змінювати його позицію за допомогою CSS-властивостей top та left.

У цьому прикладі демонструється отримання значення властивості offsetTop для елемента div з id="box". При натисканні на кнопку "Показати offsetTop" викликається функція showOffsetTop(), яка отримує елемент за допомогою document.getElementById('box'), зчитує значення властивості offsetTop цього елемента та виводить його у елемент <p> на сторінці. Оскільки елемент div має position: absolute та top: 100px, його offsetTop буде дорівнювати 100.

<div id="box" style="position: absolute; left: 50px; top: 100px; width: 200px; height: 100px; background-color: #ccc;">
  Це бокс
</div>
<button onclick="showOffsetTop()">Показати offsetTop</button>
<p id="output"></p>

<script>
function showOffsetTop() {
  const box = document.getElementById('box');
  const offsetTop = box.offsetTop; // Отримуємо значення offsetTop
  const output = document.getElementById('output');
  output.textContent = `offsetTop елемента "box": ${offsetTop}px`; // Виводимо значення
}
<script>

У цьому прикладі демонструється отримання значень offsetTop для декількох елементів, які позиціоновані абсолютно всередині батьківського елемента з position: relative. На сторінці є три елементи div з класом box, які розташовані на різних позиціях всередині батьківського div з id="container".

При натисканні на кнопку "Показати offsetTop" викликається функція showOffsetTops(), яка отримує всі елементи з класом box за допомогою document.querySelectorAll('.box'), потім ітерується через них за допомогою forEach та для кожного елемента отримує значення offsetTop та додає його до рядка виводу. Після цього рядок виводу встановлюється у елемент <p> на сторінці.

<div id="container">
  <div id="box1" class="box">Бокс 1</div>
  <div id="box2" class="box">Бокс 2</div>
  <div id="box3" class="box">Бокс 3</div>
</div>
<button onclick="showOffsetTops()">Показати offsetTop</button>
<p id="output"></p>

<script>
function showOffsetTops() {
  const boxes = document.querySelectorAll('.box');
  let output = '';
  boxes.forEach(box => {
    const offsetTop = box.offsetTop;
    output += `offsetTop елемента "${box.id}": ${offsetTop}px\n`;
  });
  document.getElementById('output').textContent = output;
}
<script>