С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для XOTAB
19 / 18 / 5
Регистрация: 30.05.2010
Сообщений: 227

Onkeydown и onkeyup задержка времени

15.08.2018, 17:50. Показов 2115. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем привет.

В общем мне нужно отловить нажатие пробела при нажатом Ctrl.
Делаю так:

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
33
34
35
runOnKeys = function (key1,key2) {
   var codes = {
         0: key1,
         1: key2
   }; 
 
   var pressed = {};
   var upper = {};
 
   document.onkeydown = function(e) {
       var e = e || window.event;
      
       delete(upper[codes[1]]);
 
       if (e.keyCode === codes[0]) {
          pressed[codes[0]] = true;
       }
   };
 
   document.onkeyup = function(e) {
       var e = e || window.event;
 
       if (e.keyCode === codes[0] && pressed[codes[0]]) {
          delete(pressed[codes[0]]);
       }
 
       if (e.keyCode === codes[1] && pressed[codes[1]]) {
         upper[codes[1]] = true;
      }
 
      if (pressed[codes[0]] && upper[codes[1]]) {
          console.log('1');
      }
   };
};
Работает, но с задержкой. Если зажать ctrl подождать секунду и нажать пробел то выходит. А если сделать это быстро то нет. Как сделать правильно что бы работало мгновенно?

Добавлено через 10 минут
В строке 2 ошибка. Редактировать не могу т.к. пишет что уже 5 минут прошло.

Должно быть так
JavaScript
1
if (e.keyCode === codes[1] && pressed[codes[0]]) {
Добавлено через 1 час 45 минут
точнее не в строке 2 а в строке 27
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2018, 17:50
Ответы с готовыми решениями:

System hook onKeyUp onKeyDown
Добрый день. Может кто подскажет. Сделал системный хук на нажатие клавиш по данному примеру http://*******/P5e6ws Вопрос, можно как то...

Задержка времени
Добрый день, столкнулся с такой проблемой, нужно реализовать точную задержку времени в 1 мс, стандартная функция Sleep() не подходит, так...

Задержка времени
Добрый день! Я делаю игру РПГ, я создаю босса, и хотелось бы сделать так, чтоб он атаковал раз в 3 секунды. Но почему-то,...

8
 Аватар для XOTAB
19 / 18 / 5
Регистрация: 30.05.2010
Сообщений: 227
16.08.2018, 10:22  [ТС]
Никто не знает? Никто этого никогда не делал?
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
16.08.2018, 14:08
XOTAB,
Цитата Сообщение от XOTAB Посмотреть сообщение
мне нужно отловить нажатие пробела при нажатом Ctrl
JavaScript
1
2
3
4
5
document.onkeydown = function(e) {
    if(e.ctrlKey && e.keyCode == 32){
        alert("Сочетание Ctrl+пробел");
    }
}
Песочница
0
 Аватар для XOTAB
19 / 18 / 5
Регистрация: 30.05.2010
Сообщений: 227
16.08.2018, 14:29  [ТС]
Во-первых первая клавиша может быть любая (та что указали в конфиге). То что я сказал Ctrl это пример. Может быть и Q и J и Shift и т.д.
Во-вторых там три комбинации:
1) Действие при нажатом Ctrl,
2) Действие при нажатии Space с зажатом Ctrl (причем выполнятеся столько раз сколько нажали Space не отпустив при этом Ctrl)
3) Действие при нажатии Shift при зажатых Ctrl и Space (выполняется столько раз сколько раз нажали на Shift при зажатых Ctrl и Space)
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
16.08.2018, 14:52
Цитата Сообщение от XOTAB Посмотреть сообщение
В общем мне нужно отловить нажатие пробела при нажатом Ctrl.
Цитата Сообщение от XOTAB Посмотреть сообщение
А если сделать это быстро то нет. Как сделать правильно что бы работало мгновенно?
В приведенных от вас цитатах я вижу вопрос на который я ответил вам выше.
Цитата Сообщение от XOTAB Посмотреть сообщение
Во-первых первая клавиша может быть любая (та что указали в конфиге). То что я сказал Ctrl это пример. Может быть и Q и J и Shift и т.д.
Во-вторых там три комбинации:
Это, наверное, нужно было озвучивать в самом начале? Неа?
0
 Аватар для XOTAB
19 / 18 / 5
Регистрация: 30.05.2010
Сообщений: 227
16.08.2018, 15:05  [ТС]
Ну в коде же видно что клавиши указывается в параметрах функции. Значит клавиши могут быть любыми.
Цитата Сообщение от XOTAB Посмотреть сообщение
runOnKeys = function (key1,key2) {
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
16.08.2018, 15:15
Цитата Сообщение от XOTAB Посмотреть сообщение
в коде же видно
Я тоже вижу очень очевидное и очень простое решение вашей проблемы, а вы его что не видите?- странно, но "в коде же видно"
Вы привели код не для таких ленивых как я. Таким ленивым, как я, нужно больше информативности в вопросе. Вот, лично я, даже не заглядывал в ваш код.
Составляя посты с вопросами, учитывайте то, что не все будут читать ваш код, старайтесь подробней объяснять "на пальцах"
Ждите может кто и ответит...
0
 Аватар для XOTAB
19 / 18 / 5
Регистрация: 30.05.2010
Сообщений: 227
16.08.2018, 15:24  [ТС]
Цитата Сообщение от zlojnaxa Посмотреть сообщение
Таким ленивым, как я, нужно больше информативности в вопросе. Вот, лично я, даже не заглядывал в ваш код.
Зачем вообще тогда отвечаете если вы даже в код не заглядывали? Таким как вы вообще тогда не нужно отвечать т.к. не посмотрев в код вы все равно ничем не поможете.

Добавлено через 5 минут
Решил сам. Только немного пришлось сменить логику.
Может кому пригодится или интересно, вот код:

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
33
34
35
36
37
38
39
40
41
42
43
44
runOnKeys = function (key1,key2,key3) {
            // Если не назначены клавиши, то назначаем Ctrl, Space, Q
            // При нажатии Ctrl + Space - листаем список вниз
            // При нажатии Ctrl + Q - листаем список вверх
            var codes = {
                0: key1 || 17, // По умолчанию Ctrl
                1: key2 || 32, // По умолчанию Space
                2: key3 || 81  // По умолчанию Q
            };
 
            var pressed = {};
 
            document.onkeydown = function(e) {
                var e = e || window.event;
 
                    if (e.keyCode === codes[0] && !pressed[codes[0]]) {
                        pressed[codes[0]] = true;
                    }
 
                    if (e.keyCode === codes[1] && (pressed[codes[0]] && !pressed[codes[1]])) {
                        pressed[codes[1]] = true;
                        console.log('Ctrl + Space');
                    }
 
                    if (e.keyCode === codes[2] && (pressed[codes[0]] && !pressed[codes[2]])) {
                        console.log('Ctrl + Q');
                    }
            };
 
            document.onkeyup = function(e) {
                var e = e || window.event;
 
                if (e.keyCode === codes[0]) {
                    delete(pressed[codes[0]]);
                }
 
                if (e.keyCode === codes[1]) {
                    delete(pressed[codes[1]]);
                }
            };
        };
 
        // Передаются коды клавиш. По умолчанию 17,32,81 (Ctrl,Пробел,Q)
        runOnKeys(17,32,81);
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
16.08.2018, 15:54
Цитата Сообщение от XOTAB Посмотреть сообщение
Таким как вы вообще тогда не нужно отвечать
Таким как вы вообще не дано решать что таким как я делать а что нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2018, 15:54
Помогаю со студенческими работами здесь

Задержка пo времени
Есть ли в C# что-то типа Sleep? Т.е. если мне нужна просто задержка времени, в смысле подождать несколько секунд? Или только таймер...

Задержка времени в С++
Подскажите пожалуйста. В Microsoft Visual C++ 6.0 как и в остальных средах С++, задержка времени осуществляется функцией Sleep(); Но...

Задержка времени
Здравствуйте! Мне необходимо сделать задержку времени, чтобы перемещение элемента было помедленнее. Пробовала использовать Sleep(), но...

задержка времени
Господа програмисты не подскажите как задержать программу на определённое время.если можно самый примитивный исходник.заранее огромное...

Задержка операций по времени
Подскажите как можно сделать так , чтобы при нажатии на кнопку действия выполнялись только через какой-то промежуток времени, к примеру...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru