Элементарно: при каждом событии движения мыши берём координаты, вычитаем из них запомненные координаты от предыдущего события и получаем вектор движения. Т.е. если сначала были координаты {50;50}, а стали {49;60}, то мышка сдвинулась в сторону {-1;10}, т.е. вниз и чуть чуть слево.
Можно сглаживать вектор движения учитывая координаты не двух измерений, а например, последних 4-5.
UPD: посмотрел примеры. Тут можно не привязываться к вектору движения мыши, ведь логика завязана на то - переходим ли мы с предыдущего пункта на следующий или со следующего на предыдущий.
Т.е. при наведении мыши на пункт определяем индекс элемента на который навели. Запоминаем. Если мышь переместилась на другой пункт, то берём его индекс и сравниваем с запомненным. Если больше - то одна анимация, меньше - другая. Если нет запомненного индекса, то можно ещё и третью анимацию прикрутить.