Если кто столкнется с подобной проблемой, то нашел решение с помощью
Intersection Observer API. Пример кода:
const onIntersectionChange = (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
//Элемент стал видим. Выполняем тут логику аппликации, а затем удаляем обсервер
observer.unobserve(entry.target);
}
});
};
const intersectionObserver = new IntersectionObserver(onIntersectionChange, {
threshold: 0.5
});
watchingElements.forEach(element => {
intersectionObserver.observe(element);
});