Comments 7
Точно не должно быть complete везде, где сейчас complite?
К сожалению, не все браузеры ещё умные. Ваша проблема скорее всего связана с тем, что не хватает scrollHeight для отскролла так, чтобы элементы выше нужного ушли из видимой области. Поэтому умный браузер в качестве якоря выбирает не тот элемент, что вам нужно, поэтому и происходит скачок. Тут я рассказывал как работают умные браузеры:
Да, вы правы, проблема в том что я не знаю финального scrollHeight. А узнать его можно только после того как компоненты с изменяемой высотой будут отрендерены на странице. По сути scrollHeight можно узнать после вызова события onRenderChildrenComplete
И да, я должен снять перед вами шляпу, потому что как то давно еще видел у вас как раз реализацию с динамическим скролом, который автоматически подгружал нужные данные в нужном положении скролла (кажется это был некий grid). Собственно по аналогии как это было реализовано у вас я и реализовал это в своем текущем проекте.
Статью по ссылке не видел, прочитаю, спасибо!
Нельзя ли применить ResizeObserver/MutationObserver? (но вполне возможно, что это даст лишнюю нагрузку на проц)
"если у нас SPA и мы хотим реализовать восстановление положения скролла при переходе на шаг назад" – а нет возможности разбить страницу на части и всё-таки задействовать scrollintoview? (в пределе – модифицируя url fragment так, чтобы соответствовал)
Контролируем scroll полностью или реализация события React: onRenderChildrenComplete