Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Событие по нажатии двух клавиш клавиатуры. (https://javascript.ru/forum/events/1036-sobytie-po-nazhatii-dvukh-klavish-klaviatury.html)

lancer 15.02.2008 03:38

Событие по нажатии двух клавиш клавиатуры.
 
Здравствуйте, Уважаемые Эксперты.

Возможно кроссбраузерно отследить событие нажатия (Ctrl или Shift или Alt) + какая либо буква?
Или события данной категории целиом заняты ОС и браузерами, и для JavaScript недоступны?

Спасибо.

Илья Кантор 15.02.2008 22:18

Не все заняты. Те, которые свободны - можно.. Еще зависит от того, какие плагины в браузере стоят.

lancer 19.02.2008 08:12

Вы рекомендуете, или сами применяли организацию некоторых функций сайта посредством горячих клавиш? Я, конечно, понимаю, что в 99.9% этого делать не стоит, я имею ввиду исключительные случаи.
В силу того, что плагины для браузеров пишутся самые разные, я подумываю эту идею оставить.

Илья Кантор 19.02.2008 12:59

Использовал горячие клавиши иногда как дубликат функций. Использовать можно, только лучше избегать очевидно занятых комбинаций.

Dmitry A. Soshnikov 25.02.2008 13:49

lancer,
Цитата:

Сообщение от lancer
Возможно кроссбраузерно отследить событие нажатия (Ctrl или Shift или Alt) + какая либо буква?

конечно, объект события несет информацию и о shift'e и о ctrl'e и об alt'e.

<script type="text/javascript">
  document.onkeydown = function(e) {
    e = e || window.event;
    if (e.shiftKey && e.keyCode == 65) {
      alert('Shift + A');
    }
    return true;
  }
</script>


Илья Кантор,
Цитата:

Сообщение от Илья Кантор
Те, которые свободны - можно..

можно и те, которые "заняты" (например, Crtl + S - обрабатывается браузером как "сохранить документ", но если предотвратить дефолтные события и их баблинг - то можно назначить свой Ctrl + S. Аналогично с остальными "занятыми" комбинациями).

hogart 22.04.2008 22:02

Можно-можно. Например, в википедии ловятся вообще Shift+Esc+T и т.п.

Гость 22.04.2008 22:44

inner.HTML
 
Очень извиняюсь, что не по теме, никто не подскажет, если через кнопку и скрипт, в ячейку таблицы загружать с помощью innerHTML картинку то:
она будет подгружаться (ИМЕЕТСЯ ВВИДУ В НАЧАЛЕ, ВМЕСТЕ СО СТРАНИЦЕЙ) при загрузке страницы, или потом, при нажатии кнопки.

hogart 23.04.2008 01:55

Цитата:

Сообщение от Гость
при загрузке страницы, или потом, при нажатии кнопки

Ну, если код подгрузки картинки указан в обработчике события click на кнопке, то при нажатии кнопки.
Если вы хотите, чтобы она загрузилась при загрузке страницы, а потом сразу показалась, то тогда код ее загрузки надо поместить в window.onload.
Что-то вроде
window.onload = function() {
  var myimg = new Image();
  myimg.src = "путь/к/картинке.jpg"; //картинка загружена, но нигде не показывается
}

а потом
mybutton.onclick = function() {
  mytd.innerHTML = myimg;
}

Londeren 14.05.2008 19:03

во всех браузерах код
<script type="text/javascript">
  document.onkeydown = function(e) {
    e = e || window.event;
    if (e.shiftKey && e.keyCode == 65) {
      alert('Shift + A');
    }
    return true;
  }
</script>

отлично ловит данное событие
пытался таким же образом ловить ctrl+enter, в ie6 у меня не вышло, подскажите плиз код рабочий для этого дела

murloc knight 08.04.2016 14:32

исползоваание 2 функций нажатия клавиш одновремкно
 
пожалуйста помогите я делаю игру и мне надо чтоб 2 игрока ходили одновременно но при зажатии 2 клавиш считываитса только нажатие 1 клавиши и ходит только 1 игрок

вопрос :
как сделать так чтоб при зажатии 2 клавиш 2 функции выполнялись одновременно ? :help:

Дмитрий_Skilltek 04.01.2017 08:52

Отследить нажатие любых клавиш одновременно , можно даже сто отследить вместе)))

keys={ //кей коды клавиш
w:87,
a:65,
s:83,
d:68
}
key={}
onkeydown=function(e){
key[e.keyCode]=true;
}
onkeyup=function(e){
key[e.keyCode]=false;
}
setInterval(function(){
if(key[keys.w] && key[keys.a] && key[keys.d]){ //если нажата клавиша w , a и d
alert("Сработало!!!");
}
},1)

но после алерта нужно обновлять клавиши , а то отпускание клавиши не отследится ...

keys={ //кей коды клавиш
w:87,
a:65,
s:83,
d:68
}
key={}
onkeydown=function(e){
key[e.keyCode]=true;
}
onkeyup=function(e){
key[e.keyCode]=false;
}
setInterval(function(){
if(key[keys.w] && key[keys.a] && key[keys.d]){ //если нажата клавиша w , a и d
key.w=key.a=key.d=false;
alert("Сработало!!!");
}
},1)

Дмитрий_Skilltek 08.01.2017 14:11

Цитата:

Сообщение от murloc knight (Сообщение 413558)
пожалуйста помогите я делаю игру и мне надо чтоб 2 игрока ходили одновременно но при зажатии 2 клавиш считываитса только нажатие 1 клавиши и ходит только 1 игрок

вопрос :
как сделать так чтоб при зажатии 2 клавиш 2 функции выполнялись одновременно ? :help:

javascript:
key={}
onkeydown=function(e){
key[e.keyCode]= true; //клавиша которая нажата равна true
}
onkeyup=function(e){
key[e.keyCode]= false; // клавиша которая отпущена равна false
}


Проверка
if(key[87]){
// W - нажата
}

Но этот код записывает ключи клавиш(W-87) , чтобы провенить K-узнай её ключ :
onkeydown=function(e){
alert(e.keyCode); //чтоб узнать ключ
}


Часовой пояс GMT +3, время: 13:46.