Не будучи 2000 и поздно

Плавная прокрутка была проблемой в умах разработчиков с незапамятных времен. Мы много чего сделали для анимации страницы, но что произойдет, если у вас есть динамический контент, который постоянно меняется? Полосы прокрутки с фиксированной высотой и процентные значения так 2000 и позже. Наступил 2019 год, и у нас есть Resize Observer - надежный способ определения высоты вашего контента, при этом всегда сохраняя ощущение собственной прокрутки, к которому привыкли пользователи. Плавная прокрутка должна улучшить UX, а не ухудшить его.

Давайте начнем.

Прежде всего, мы создадим компонент SmoothScroll с двумя div, один в качестве области просмотра, а другой - для добавления высоты к фактическому телу, чтобы мы могли прокручивать страницу и добавлять их в качестве ссылок.

Теперь давайте настроим App.js, чтобы мы могли с чем-то работать. Решил, что загружу изображения из unsplash и сопоставлю их в DOM, используя состояние, и добавил кнопку, чтобы мы могли добавить столько или меньше, сколько захотим.

Давайте сделаем базовый стиль, чтобы он не выглядел так уродливо.

А теперь перейдем к мелочам.

Наблюдатель изменения размера возвращает метод, называемый наблюдением (элементы), который принимает массив элементов или один элемент. На всякий случай, если вы захотите добавить массив, я решил, что было бы неплохо добавить небольшой цикл.

Теперь, в качестве последнего штриха, мы добавляем в окно прослушиватель прокрутки и сопоставляем его с методом onScroll компонента. Мы также обновим состояние, как только наблюдатель изменения размера обнаружит изменение высоты. Мы оживляем его с помощью GSAP TweenLite и упрощаем его с помощью их алгоритма Power4.easeOut и VOILA. У вас есть отличная страница с плавной прокруткой, которая обновляется при обновлении контента.

Вы можете взглянуть на конечный продукт здесь или просмотреть полный исходный код на CodeSandbox ниже.



Спасибо за ваше время, и я надеюсь, что вы кое-что узнали. Мир снаружи.

Перед тем как уйти, зацените меня в моих соцсетях: 👀

🔗 Мой сайт / портфолио

🐦 Twitter

📷 Instagram

Цифровое агентство, в котором я работаю: Digital Present