Как понять видит ли пользователь элемент или его часть на странице?
Через getBoundingClientRect проверять координаты элемента, и сравнивать их, попадают ли они в координаты клиентской области экрана, к примеру.
Наилучший вариант – Intersection Observer