Снимать класс у div если он вне поля зрения
На сайте есть много блоков, которые анимированы с помощью добавления класса t-animate_started, срабатывает когда доскролили до блока. Как сделать так, чтобы когда блок вне поля видимости класс снимался? Подскажите пожалуйста решение или же пример с похожей реализацией на js или jquery.
Ответы (1 шт):
Автор решения: ᅠhᅠ
→ Ссылка
const elements = document.querySelectorAll('span')
const toggleClass = entry => {
if (entry.isIntersecting)
entry.target.classList.add('t-animate_started')
else
entry.target.classList.remove('t-animate_started')
}
const callback = entries => entries.forEach(toggleClass)
// опция threshold указывает на сколько процентов
// блок за которым происходит слежение
// должен быть виден, чтобы отработала callback-функция
// в моем случае callback-функция отработает
// когда квадрат томатного цвета полностью покажется на экране
// или хотя бы немного выйдет за экран
// (если он уже был виден полностью до этого)
const options = { threshold: 1 } // 1 === 100%
const observer = new IntersectionObserver(callback, options)
elements.forEach(element => observer.observe(element))
body {
margin: 0;
}
div {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
span {
height: 100px;
width: 100px;
background-color: tomato;
transition: 1s;
}
span.t-animate_started {
transform: rotate(360deg);
}
<div><span></span></div>
<div><span></span></div>
<div><span></span></div>