Comments 2
проблема нативного плавного кастомного скролла была решена 2гис в 2013 году https://habr.com/ru/companies/2gis/articles/169359/
Спасибо за ссылку — интересное решение. Это действительно один из вариантов решения задачи, но он решает её на другом уровне.
Они сохранили нативный механизм скролла браузера (overflow: scroll) и фактически заменили только его визуальное представление: скрыли системный scrollbar и синхронизировали с scrollTop собственный. В статье это прямо указано как основное требование решения.
При этом авторы сами указывают на ограничения такого подхода:
«К недостаткам можно отнести отсутствие горизонтального скроллбара и контролов управления вертикальным».
morphing-scroll пошёл в другую сторону. Мне было недостаточно просто заменить внешний вид scrollbar — хотелось управлять самим поведением скролла: анимацией, горизонтальным wheel, nested scrolling, slider-режимом, keyboard/touch interaction, виртуализацией и т.д.
Поэтому основную механику пришлось реализовывать самостоятельно. Это, в свою очередь, дало возможность гораздо глубже кастомизировать поведение скролла и обойти ограничения описанного подхода.
Так что я бы сказал, что решение 2ГИС — это скорее custom scrollbar поверх native scrolling, а morphing-scroll — кастомный scroll-компонент с собственной моделью поведения.
Но спасибо за ссылку — подход 2ГИС действительно интересный. Более того, первые версии библиотеки у меня как раз двигались примерно в этом направлении, пока я не упёрся в ограничения native scrolling.
История npm‑библиотеки morphing‑scroll