Реализовать momentum scroll с помощью hammer & moment
В приложении на React необходимо реализовать momentum scroll, идентичный тому, который есть в iOS/MacOS, используя библиотеки react-hammer (для отслеживания gestures) и react-motion (для анимации состояний, возможна замена на аналог)
Для этого, следует вычислить/подобрать правильную функцию анимации на основе пользовательских gestures, используя формулу, описанную в статье:
В основном, пока длится касание, Apple позволяет перемещать экран 1:1.В конце касания, Apple создает импульс, разделив количество пикселей, которые пользователь прошел, и время, которое пользователь на это потратил. Если количество пикселей меньше 10 или время меньше 0,5, импульс будет ограничен до нуля.
В любом случае, как только нам станет известен импульс (скорость), следует умножить его на 0,95 в каждом кадре, а затем переместить экран на столько.
Задача считается выполненной, когда кастомная анимация будет выглядеть идентично нативной (за исключением отсутствия bouncing), а исполнитель сможет обьяснить соответствие своего кода принципу, описанному в статье.
Важно: css-анимация не подходит, т.к. должны быть изменяемые props/state внутри приложения.
App boilerplate: https://codesandbox.io/s/momentum-scrollview-gxw4g?fontsize=14&hidenavigation=1&theme=dark