Привязывайтесь к событию onmousemove: {
В глобальной переменной сохраняете временную отметку последнего движения мыши(каждое перемещение обновляет отметку).
Запускаете setTimeout с функцией X и передачей ей этой временной отметки }
Вот сработала эта функция X и проверяете - совпадают ли временные отметки. Если да - не двигался и запуск обработки.
p.s. за эффективность на практике поручиться не могу - если так сделаете - отпишитесь, интересно, что там с тормозами.