В случае с общим решением для одно-страничного сайта, популярным решением будет использование библиотеки -
https://camwiegert.github.io/in-view/
inView('.someSelector')
.on('enter', doSomething)
.on('exit', el => {
el.style.opacity = 0.5;
});
----------------------
Посмотрите данный пример - без использования сторонних библиотек. Как только белый квадрат попадает в поле зрения - цвет фона меняется.
jsfiddle.net/t2L274ty/1