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 є корисною властивістю для визначення точного розташування елементів на веб-сторінці та реалізації різноманітних ефектів прокрутки та анімацій на основі цієї інформації.
- Порада
-
Пам'ятайте, що
автор: BondoffsetTopвимірюється відносно найближчого батьківського елемента зposition: relative,position: absoluteабоposition: sticky. Якщо такого батьківського елемента немає, тоoffsetTopвимірюється відносно документа. Це важливо враховувати при роботі з вкладеними елементами або при використанні різних схем позиціонування. - Порада
-
Комбінуйте
offsetTopз іншими властивостями, такими якoffsetLeft,offsetWidthтаoffsetHeight, для отримання повної інформації про розміри та положення елемента. Це може бути корисним для реалізації складних макетів або динамічних ефектів.
автор: Bondconst element = document.getElementById('myElement'); const rect = { top: element.offsetTop, left: element.offsetLeft, width: element.offsetWidth, height: element.offsetHeight }; - Порада
-
Для перевірки, чи елемент видимий у вікні перегляду, використовуйте
offsetTopразом з іншими властивостями, такими якwindow.innerHeightабоdocument.documentElement.clientHeight. Це дозволить визначити, чи потрібно виконувати певні дії залежно від видимості елемента.
автор: Bondfunction isElementInViewport(el) { const rect = el.getBoundingClientRect(); return ( rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) ); }
Синтаксис
Element.offsetTop
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 1 | 1 | 3 | 8 | 12 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 4 | 1 |
| Переглядач | ||
|---|---|---|
| - | - |
Приклади
+ запропонувати свій приклад у пісочниці
У цьому прикладі демонструється отримання значень offsetTop для декількох елементів, які позиціоновані абсолютно всередині батьківського елемента з position: relative. На сторінці є три елементи div з класом box, які розташовані на різних позиціях всередині батьківського div з id="container".
При натисканні на кнопку "Показати offsetTop" викликається функція showOffsetTops(), яка отримує всі елементи з класом box за допомогою document.querySelectorAll('.box'), потім ітерується через них за допомогою forEach та для кожного елемента отримує значення offsetTop та додає його до рядка виводу. Після цього рядок виводу встановлюється у елемент <p> на сторінці.
HTML
<button onclick="showOffsetTops()">Показати offsetTop усіх</button>
<p id="output"></p>
<div id="box1" class="box">Бокс 1</div>
<div id="box2" class="box">Бокс 2</div>
<div id="box3" class="box">Бокс 3</div>
CSS
.box {
height: 40px;
background: #eef6ff;
margin-bottom: 8px;
}
#output { white-space: pre-line; }
JS
function showOffsetTops() {
const boxes = document.querySelectorAll('.box');
let output = '';
boxes.forEach(box => {
output += 'offsetTop ' + box.id + ': ' + box.offsetTop + 'px\n';
});
document.getElementById('output').textContent = output;
}
У цьому прикладі демонструється використання властивості 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.
HTML
<button onclick="showOffsetTop()">Показати offsetTop</button>
<p id="output"></p>
<div id="box">Бокс</div>
CSS
#box {
margin-top: 40px;
width: 200px;
height: 60px;
background: #ccc;
}
JS
function showOffsetTop() {
const box = document.getElementById('box');
const output = document.getElementById('output');
// offsetTop — відстань до верху найближчого позиціонованого предка
output.textContent = 'offsetTop елемента box: ' + box.offsetTop + 'px';
}
Коментарі
Коментарів ще немає — будьте першим!