Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

JS как отследить скролл сверху у элемента?

Ginap12 Гуру (3627), на голосовании 1 неделю назад
чтобы работало как scrollintoview но я хочу еще немного пикселей сверху добавить поэтому мне это надо
Голосование за лучший ответ
frontDev Мастер (1531) 1 месяц назад
Чтобы отслеживать положение прокрутки относительно верха элемента и добавлять несколько дополнительных пикселей сверху, можно использовать комбинацию метода JavaScript getBoundingClientRect() и свойства window.scrollY.

Сначала создадим функцию, которая вычисляет расстояние от верха элемента до верха области просмотра:
 function getElementTopPosition(element) { 
const rect = element.getBoundingClientRect();
return rect.top + window.scrollY;
}
Теперь давайте создадим функцию, которая прокручивает до элемента с дополнительным смещением:

 function scrollToElementWithOffset(element, offset = 0) { 
const elementTop = getElementTopPosition(element);
const targetScrollPosition = elementTop - offset;

window.scrollTo({
top: targetScrollPosition,
behavior: 'smooth'
});
}
Можно использовать следующим образом:

 const targetElement = document.getElementById('your-element-id'); // Получаем элемент, к которому хотим прокрутить
scrollToElementWithOffset(targetElement, 20); // Прокрутка до элемента со смещением 20px от верха
Этот подход дает больше контроля над поведением прокрутки по сравнению с scrollIntoView(). Можно настроить смещение по мере необходимости, чтобы точно настроить положение прокрутки.

Если вы хотите непрерывно отслеживать положение прокрутки относительно элемента, можно добавить прослушиватель событий к событию window.scroll =):

 function trackScrollPosition(element) { 
const elementTop = getElementTopPosition(element);

window.addEventListener('scroll', () => {
const scrollPosition = window.scrollY;
const distanceFromElementTop = scrollPosition - elementTop;

console.log(`Distance from element top: ${distanceFromElementTop}px`);

// Можно выполнять дополнительные действия в зависимости от положения прокрутки здесь
});
}

// Использование
const targetElement = document.getElementById('your-element-id');
trackScrollPosition(targetElement);
Помните, что для повышения производительности вам может потребоваться отключить или ограничить прослушиватель событий прокрутки, если вы выполняете сложные операции или часто обновляете DOM на основе позиции прокрутки.
Похожие вопросы