Для тех, кому это может помочь, ниже представлен подход, который я сейчас использую для достижения хорошего эффекта.
//check object is in view
function checkVisible( elm, eval ) {
eval = eval || "object visible";
var viewportHeight = $(window).height(), // Viewport Height
scrolltop = $(window).scrollTop(), // Scroll Top
y = $(elm).offset().top,
elementHeight = $(elm).height();
if (eval == "object visible") return ((y < (viewportHeight + scrolltop)) && (y > (scrolltop - elementHeight)));
if (eval == "above") return ((y < (viewportHeight + scrolltop)));
}
Благодарен за поиск приведенного выше кода в этом посте: Вызов функции прокрутки только один раз
Затем я использовал это в своем проекте:
scroll.on('call', func => {
if (checkVisible($('#myID1'))) {
//do something when myID1 is in view
console.log("test myID1");
} else if (checkVisible($('#myID2'))) {
//do something when myID2 is in view
console.log("test myID2");
} else {
// do nothing
}
});
Может помочь кому-нибудь. Удачи!