По событию mousemove складываете координаты мыши в
очередь
По requestAnimationFrame выдергиваете из очереди несколько элементов, при том чем больше очередь - тем больше дергаем (надо подбирать), по полученному набору координат корректируете вектор скорости и отрисовываете движение