Вместо прослушивания события прокрутки вы можете использовать API наблюдателя пересечения , который может отслеживать элементы, которые входят и выходят из поля зрения. Каждый раз, когда наблюдаемый элемент входит в вид или покидает его, запускается функция обратного вызова, в которой можно проверить, вошел ли элемент в вид или покинуть его, и обработать его соответствующим образом.
Он также обладает высокой производительностью и спасает вас от некоторые расчеты высоты и высоты. Проверьте это в приведенном ниже примере.
Если у вас есть какие-либо вопросы по этому поводу, пожалуйста, сообщите мне. для просмотра, не частично, установите значение параметра threshold
равным [1]
. По умолчанию это [0]
, что означает, что он срабатывает всякий раз, когда элемент виден минимум на 1 пиксель. [1]
утверждает, что 100% элемента должно быть в поле зрения для запуска. Значение может варьироваться от 0 до 1 и может содержать несколько точек запуска. Например,
const options = {
threshold: [0, 0.5, 1]
};
Что означает начало, на полпути и полностью в поле зрения.
const project = document.querySelector('.project');
const observerCallback = entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('red');
} else {
entry.target.classList.remove('red');
}
});
};
const options = {
threshold: [1]
}
const observer = new IntersectionObserver(observerCallback, options);
observer.observe(project);
.top,
.bottom{
height: 700px;
width: 100%;
}
.project {
background: black;
height: 200px;
width: 100%;
}
.project.red {
background: red;
}
<div class="top"></div>
<div class="project"></div>
<div class="bottom"></div>