Здравствуй, Хабр.
Бьюсь над одной интересной лагой, имеющей место быть только в Safari.
Что у меня есть: изначально на странице есть 3 блока. Когда мы скроллим страницу вниз и достигаем центром экрана верхней границы последнего блока происходит AJAX-запрос, после выполнения которого происходит удаление верхнего блока, append нового блока после последнего и сразу же к scrollTop прибавляем высоту удалённого блока. Похожее поведение происходит при прокрутке вверх. При пересечении серединой экрана нижней границы верхнего блока происходит AJAX-запрос, после исполнения которого удаляется нижний блок, вставляется новый блок перед первым и из scrollTop отнимаем высоту вставленного блока, для обеспечения ощущения, будто мы никуда ничего не вставлялось.
Поиграть можно тут (source code читабелен)
Итак в Chrome, Firefox всё работает просто прелестно — как и ожидалось.
Но в Safari если присмотреться, то создаётся впечатление что очень часто scrollTop происходит спустя какое-то количество миллисекунд…
На этом видео обратите внимание на эти моменты: 0:11, 0:26, 0:50, 0:53, 1:00, 1:05.
Пробовал делать много: менять порядок событий, делать всякие таймауты — ничего не помогает…
Товарищи, какие у вас есть мысли по этому поводу?