Столкнулся с похожей проблемой, вот мой вопрос:
Как вернуться в позицию элемента, после добавлении новых элементов выше него (scrollTo после prepend)? . Я пришел к тому, что надо к каждому изображению хранить размеры и до загрузки изображений, вставлять враппер в размер изображений.
Другой вариант, это после выполнения animate проверять, не сдвинулась ли позиция скролла и если сдвинулась запускать его повторно. Вот код из моего примера:
...
let scroller = ()=>{
$('html,body').animate({
scrollTop: firstFeedItem.offset().top
}, 300, ()=>{
if (~~$(window).scrollTop() < ~~(firstFeedItem.offset().top)) {
scroller();
}
});
};
scroller();
...
в целом будет работать, но могут быть и проблемы, если например одно из изображений задержится более чем на пару секунд, в этом случае надо смотреть по ситуации, насколько это критично..