Есть гораздо более лучший вариант для вашей задачи, IntersectionObserver, гуглите, нативная js фича. Вот пример реализации.
function onEntry(entry) {
entry.forEach((change) => {
if(change.isIntersecting) {
change.target.classList.add('visible');
}
});
}
// list of options
let options = {
threshold: [0.4]
};
// instantiate a new Intersection Observer
let observer = new IntersectionObserver(onEntry, options);
// list of paragraphs
let elements = document.querySelectorAll('section');
// loop through all elements
// pass each element to observe method
// ES2015 for-of loop can traverse through DOM Elements
for (let elm of elements) {
observer.observe(elm);
}