Вы изначально не правильно все начали делать. Во первых если это потом все собирается вылиться в игру то срочно переходите на канвас. Во вторых он у вас двигается с задержкой потому-что keydown это одиночное событие, но через пару мс срабатывает эффект залипания, которые создают события keydown. Типа нажмите на текстовое поле и нажмите и подержите любую клавишу на клавиатуре, сначала вставится один символ и через несколько мс один начнут повторятся бесконечно пока не отожмешь. На самом деле в таких случаях я считаю лучше использовать gameLoop функции, тоесть как и во всех играх одна функция которая вызывается например 60 раз в секунду в идеале для (60fps) и в ней уже отдельно производится вызов функций для обработки физики, рендера и т.п. Ну с вашим
примером можно так. Функция handler это и есть та самая gameLoop функция