Перемещение объекта с помощью клавиатуры
Всем привет! Пытаюсь написать код, чтобы квадрат(div) можно было перемещать влево и вправо с помощью стрелочек на клавиатуре. Двигаться квадрат я заставил, но получается криво. Получилось так:
1) Если я нажимаю стрелочку вправо, то квадрат двигается вправо. Если во время движения вправо я захочу развернуть квадрат влево, то квадрат сразу перескакивает на стартовую позицию, и уже после его можно двигать влево. 2) Если я изначально двигаю квадрат влево, а потом захочу развернуть его вправо, то ничего не происходит. прикладываю код. <div id="kvadrat"> <div id="kvadr" ></div> </div> var left = 0; var right = 0; window.onkeydown = function move_left(){ if(event.keyCode==37){ left=left-10; document.getElementById('kvadr').style.left = left + 'px'; } else if(event.keyCode==39){ right=right-10; document.getElementById('kvadr').style.right= right + 'px'; }; } Пытался уже по разному менять код, и ничего не получается. P.S. Я новичок в программировании |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ position: absolute; } </style> </head> <body> <div id="kvadrat"> <div id="kvadr">1</div> </div> </body> <script> var left = 0; window.onkeydown = function move_left(){ if(event.keyCode==37){ left=left-10; document.getElementById('kvadr').style.left = left + 'px'; } else if(event.keyCode==39){ left=left+10; document.getElementById('kvadr').style.left= left + 'px'; } }; </script> </html> |
и кстати
left=left+10; эквивалентно left+=10; |
Спасибо! сработало:)
|
Еще один вопрос. Если я хочу сделать тоже самое, но уже с кнопками вверх и вниз. Где нужно создать функцию. Понятно, что для движения нужно создать новую переменную со значением 0, а дальше не получается.Просто пытаюсь сам додуматься, но безуспешно.
|
все тоже самое, только эта условная ось x а вторая y.
Создаем новую переменную или массив [0,0] или даже объект {x:0,y:0} проверяем не только вправо влево, но и вверх вниз, можно так же через else if |
я так и делал, просидел 2 часа, а нужно было использовать другое имя переменной.
Почему такой вариант не работал? var top = 0; else if(event.keyCode==40){ top=top-10; document.getElementById('kvadr').style.top= top + 'px'; } а такой работает var y = 0; else if(event.keyCode==40){ y=y-10; document.getElementById('kvadr').style.top= y + 'px'; } |
Цитата:
window.onkeydown = function (event) { var code = event.keyCode || event.charCode; if (code != 37 && code != 39) return; var prop = document.getElementById('kvadr').style; prop.left = +prop.left.replace(/[^\d\-]+?/g, '') + (code == 37 ? -10 : 10) + 'px'; }; |
Temcher, "top" - ссылка на корневое окно (window) в иерархии окон, её нельзя переопределить в глобальной ОВ.
|
Nexus, replace и регулярки тут тоже не особо нужны.
window.onkeydown = function (event) { var code = event.keyCode || event.charCode; if (code != 37 && code != 39) return; var prop = document.getElementById('kvadr'); prop.style.left = prop.offsetLeft+ (code == 37 ? -10 : 10) + 'px'; }; |
Часовой пояс GMT +3, время: 20:38. |