Я для таких вещей использую
waypoints и CSS-анимацию.
К примеру, с этим плагином можно написать вот такой сниппет:
$(".waypoint").each( function() {
var $this = $(this);
$this.waypoint( function(dir) {
if(dir === "down") {
$this.addClass("reached");
}else if($this.data('both-direction') !== undefined) {
$this.removeClass("reached");
}
}, {offset: parseInt($this.data('offset')) || 0 });
});
И потом для любого элемента прописать класс
waypoint и (опционально)
data-offset — отступ в пикселях, при котором будет добавляться класс
reached. И ещё, если указать атрибут
data-both-direction, при скролле обратно класс будет убираться. Если не указывать, то останется насовсем. Достаточно удобно использовать такую штуку, если на сайте много элементов, у которых нужно менять класс по мере прокрутки мимо них.
Но если это нужно для одного элемента на сайте, проще написать обработчик на scroll, конечно.