Тут всё реализовано как обычный
drag and drop на сенсорных устройствах.
1. С помощью JS (
touchstart) определяем стартовые координаты нажатия. Так как присутствует
transition: transform 300ms ease
то убираем его (чтобы не глючило при перемещении).
2.
touchmove отслеживает изменение положения и одновременно записывает изменения в стили меню
document.querySelector('#myMenu').style.transform = "translate("+x+"px,"+y+"px)";
3.
touchend определяет координаты, где "отпустили палец" и сравнивает со стартовой позицией (или, условно, translateX < 0, как на том сайте) и принимает решение, что делать. Если отключалась анимация (см. п.1.) тогда она возвращается и элемент снова плавно передвигается.