Готовый код писать не стану. Но могу поделится мыслями
1. Создаем некий слой который будет перемещаться (стрелку)
2. Запоминаем его позицию что бы возвратится если не последовало клика.
3. Задаем интервал времени при котором слой будет перемещаться до определенного пункта(место назначения), что и послужит плавным передвижением.
Функции реализации: window.setTimeout(), window.clearTimeout()
Если курсор уходит с области меню - стрелка должна возвращаться к последнему выделенному пункту меню.
все тоже самое только наоборот. Тоесть передвигаем слой на начальную позицию(пункт 2)
[off]Думаю коллеги меня поправять если я где то ошибся.[/off]