Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127

События клавиатуры

21.09.2019, 20:10. Показов 2133. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь сделать управление блоком по сайту с помощью стрелок.
Для стрелок влево и вправо работает а для вверх и вниз нет.

HTML5
1
 <div id="block"></div>
CSS
1
2
3
4
5
6
7
8
9
#block{
    width: 300px;
    height: 300px;
    background-color:blue;
    position: absolute;
    left: 50px;
    top:50px;
 
}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    var div_c = document.getElementById("block");
    div_c.addEventListener("mouseover", a, false);
    div_c.addEventListener("mouseout", b, false);
    div_c.addEventListener("click", c, false);
    div_c.addEventListener("dblclick", d, false);
    window.addEventListener('keydown', f,false);
    window.addEventListener('keyup', f,false);
 
var left=0;
var top=0;
function f(e){
switch (e.keyCode){
    case 38://вверх
        top-=10;
        div_c.style.top=top+'px';
        break;
    case 40://вниз
        top+=10;
        div_c.style.top=top+'px';
        break;
     case 39:
        left+=10;//Вправо
        div_c.style.left=left+'px';
        break;
     case 37://Влево
        left-=10;
        div_c.style.left=left+'px';
        break;
    
}
   
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2019, 20:10
Ответы с готовыми решениями:

События клавиатуры
пишу код onkeydown=function(){ if(event.keyCode==37){ left_scroll(); }else if(event.keyCode==39){ right_scroll(); ...

Qt события клавиатуры
Подскажите как отловить событие нажатия клавиш Fn и PrtScr. Часто встречала предложение отлавливать через keyup и keydown,даже в нем нашла...

события от клавиатуры
Сводная таблица расширенных кодов Значение 2-го Соответствующие клавиши байта 15 ...

2
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
21.09.2019, 20:41
Лучший ответ Сообщение было отмечено gordon8899 как решение

Решение

Цитата Сообщение от gordon8899 Посмотреть сообщение
а для вверх и вниз нет
Переименуйте переменную top, в браузере есть глобальное свойство top и оно перекрывает переменную
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
22.09.2019, 08:51
Лучший ответ Сообщение было отмечено ТабуретY как решение

Решение

Клавиатурные события в браузере - это зона непуганных извращений.
Свойства wich, keycode и charCode официально признаны устаревшими.
Рекомендуют пользоваться современными свойствами key и code.

Но! В MS Edge современное стандартное свойство code не поддерживается. Извращение.
Остаётся рабочим только свойство key, которое правильно работает на обычных стрелках и на стрелках в цифровом блоке клавиатуры.

В результате в синтаксисе ES2015 получаем такое веселье:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <style>
        #block {
            width: 300px;
            height: 300px;
            background-color: blue;
            position: absolute;
            left: 50px;
            top: 50px;
        }
    </style>
</head>
<body>
    <div id="block"></div>
    <script type="module">
        let div_c = document.getElementById("block"),
            style = getComputedStyle(div_c),
            left = parseInt(style.left),
            top = parseInt(style.top);
 
        div_c.tabIndex = 0;
        div_c.focus();
 
        // Будет срабатывать, когда квадрат в фокусе
        div_c.addEventListener("keydown", div_c_keydown);
        // Будет срабатывать, когда квадрат НЕ в фокусе
        document.addEventListener("keydown", e => { console.log("document"); });
 
        function div_c_keydown(e) {
            e.stopPropagation(); // Предотвратить распространение события на документ
            switch (e.key) {
                case "ArrowRight":
                    left += 10;
                    div_c.style.left = left + "px";
                    break;
                case "ArrowLeft":
                    left -= 10;
                    div_c.style.left = left + "px";
                    break;
                case "ArrowUp":
                    top -= 10;
                    div_c.style.top = top + "px";
                    break;
                case "ArrowDown":
                    top += 10;
                    div_c.style.top = top + "px";
                    break;
            };
        }
    </script>
</body>
</html>
Чтобы переменная top не конфликтовала со свойством window.top,
в современном синтаксисе ES2015 придумали ключевое слово let и <sсript type="module">

Добавлено через 18 минут
---
Полезные ссылки:
https://learn.javascript.ru/bubbling-and-capturing
https://www.w3.org/TR/DOM-Leve... oardevents

Такие мелочи тяжело запоминать. Проще в справочник при необходимости смотреть.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2019, 08:51
Помогаю со студенческими работами здесь

события клавиатуры в с++
Как сделать так что бы при нажатии на клавиатуру, дигалась картинка, и как додать картинку?спс)

События клавиатуры в Qt
Событие приходит 4 раза вместо одного, как исправить? Посмотрел в qDebug(), так как в строку тоже не добавляется нужный символ. bool...

Не обрабатывает события клавиатуры
Реализую игру 2048. У меня есть функция, которая делает движения вправо. Функция работает исправно, проверил. Окно не обрабатывает нажатие...

QML События с клавиатуры
Здраствуйте, возможно ли получить события от клавиатуры компоненту у которого нет фокуса, используя только QML

C++ события нажатия клавиатуры
помогите сделать мини программу, при нажатии на alt-x-f выводилось messagebox с текстом на экране(или форме) была бегущая строка, при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru