[JQUERY] 캔의 jQuery .keypress () 더 동시에 하나의 키보다 감지?
JQUERY캔의 jQuery .keypress () 더 동시에 하나의 키보다 감지?
해결법
-
1.여러 개의 키를 감지하기 위해, 아래 개최를 keyDown과의 keyup 이벤트를 사용하고.
여러 개의 키를 감지하기 위해, 아래 개최를 keyDown과의 keyup 이벤트를 사용하고.
var keys = {}; $(document).keydown(function (e) { keys[e.which] = true; }); $(document).keyup(function (e) { delete keys[e.which]; });
여기 데모를 함께 넣어했습니다 http://jsfiddle.net/gFcuU/. 내 키보드는 대부분의 6 키에서 감지 할 경우에만 할 수있다 발견하더라도 그것은 재미의 종류입니다.
-
2.때에 따라 다르지. "정상"키를 들면, 수단 비 시프트, Ctrl 키, Alt, (CMD)는, 대답은 '노 것으로, 이벤트 핸들러는, 큐에 / 잇달아 불을 잡을 수 없습니다.
때에 따라 다르지. "정상"키를 들면, 수단 비 시프트, Ctrl 키, Alt, (CMD)는, 대답은 '노 것으로, 이벤트 핸들러는, 큐에 / 잇달아 불을 잡을 수 없습니다.
제가 위에서 언급 한 수정 키를 들어, 이벤트 객체의 속성이 있습니다.
예:
$(document).bind('keypress', function(event) { if( event.which === 65 && event.shiftKey ) { alert('you pressed SHIFT+A'); } });
Js 휘티 d 혀라도.
다른 속성은 다음과 같습니다 :
-
3.당신은 단지 몇 가지 키를 직렬 누르면 핸들러를 발사 같은 것을 시도하려는 경우 :
당신은 단지 몇 가지 키를 직렬 누르면 핸들러를 발사 같은 것을 시도하려는 경우 :
jQuery.multipress = function (keys, handler) { 'use strict'; if (keys.length === 0) { return; } var down = {}; jQuery(document).keydown(function (event) { down[event.keyCode] = true; }).keyup(function (event) { // Copy keys array, build array of pressed keys var remaining = keys.slice(0), pressed = Object.keys(down).map(function (num) { return parseInt(num, 10); }), indexOfKey; // Remove pressedKeys from remainingKeys jQuery.each(pressed, function (i, key) { if (down[key] === true) { down[key] = false; indexOfKey = remaining.indexOf(key); if (indexOfKey > -1) { remaining.splice(indexOfKey, 1); } } }); // If we hit all the keys, fire off handler if (remaining.length === 0) { handler(event); } }); };
예를 들어, S-t에 화재,
jQuery.multipress([83, 84], function () { alert('You pressed s-t'); })
-
4.아니. 같은 CTRL, ALT 및 SHIFT와 같은 수정 키 위해, 당신이 다른 하나의 열쇠입니다 너무 오래로, 다른 키와 조합 수를 제외하고 -의 키는 누를 때마다 각각의 키에 대해 실행됩니다.
아니. 같은 CTRL, ALT 및 SHIFT와 같은 수정 키 위해, 당신이 다른 하나의 열쇠입니다 너무 오래로, 다른 키와 조합 수를 제외하고 -의 키는 누를 때마다 각각의 키에 대해 실행됩니다.
-
5.다음은 jQuery를 솔루션에 기반으로 마치에이의 대답 https://stackoverflow.com/a/21522329/
다음은 jQuery를 솔루션에 기반으로 마치에이의 대답 https://stackoverflow.com/a/21522329/
// the array to add pressed keys to var keys = []; // listen for which key is pressed document.addEventListener('keydown', (event) => { if ($.inArray(event.keyCode, keys) == -1) { keys.push(event.keyCode); } console.log('keys array after pressed = ' + keys); }); // listen for which key is unpressed document.addEventListener('keyup', (event) => { // the key to remove var removeKey = event.keyCode; // remove it keys = $.grep(keys, function(value) { return value != removeKey; }); console.log('keys array after unpress = ' + keys); }); // assign key number to a recognizable value name var w = 87; var d = 68; var s = 83; var a = 65; // determine which keys are pressed document.addEventListener('keydown', (event) => { if ($.inArray(w, keys) != -1 && $.inArray(d, keys) != -1) { // w + d console.log('function for w + d combo'); } else if ($.inArray(s, keys) != -1 && $.inArray(a, keys) != -1) { // s + a console.log('function for s + a combo'); } })
바이올린 데모
https://jsfiddle.net/Hastig/us00zdo6/
-
6.내 요점은 (아무도 :( 그것을 사용하지 않았다) 만료로 나는 더 많은 2017 솔루션 답을 업데이트하기로 결정했습니다. 아래 확인하십시오.
내 요점은 (아무도 :( 그것을 사용하지 않았다) 만료로 나는 더 많은 2017 솔루션 답을 업데이트하기로 결정했습니다. 아래 확인하십시오.
JQuery와 바로 가기를 감지하는 내 플러그인을 사용할 수 있습니다.
그것은 기본적으로 캐시의 이벤트는 키가 순간에 누를 것을 얻을. 모든 키를 누르면 경우는 기능을 발생합니다.
https://github.com/maciekpaprocki/bindShortcut (만료!)
당신은 어떻게 추가 정보 파일에서 사용하는 작은 설명이있다. 도움이 되었기를 바랍니다. 피드백 이상의 감사합니다.
[편집] 2017 :
그것은 2017 년이고 우리는 같은 물건을 해결하기 위해 jQuery를 플러그인이 필요하지 않습니다. 즉 당신이 뭔가를해야합니다 :
let pressed = {}; document.addEventListener('keydown', (event) => { pressed[event.key] = true; }); document.addEventListener('keyup', (event) => { delete pressed[event.key]; }); //and now write your code document.addEventListener('keydown', (event) => { if(pressed[firstKey]&&pressed[secondKey]){ //dosomething } });
이전 브라우저는 IE9의 모든 (슈퍼 오래된 우분투 등) 권리 행사의 위임을 지원하지 않는 OS에서의 한계 금액을 제외하고 잘 작동합니다 그러나에서 약간의 단점이있을 수 있습니다. 그들에 그 브라우저의 문제가 아니라 같은 것을 해결할 수있는 방법은 없습니다.
예를 들어 뚜껑 잠금에 대해 같은 부울 키에 연결된 새로운 맥 몇 가지 단점이 있습니다.
더 읽기 : https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names_and_Char_values
-
7.@ 데이비드 탕의 솔루션에 따르면, 여기 Ctrl + A 조합 + Shift 키를 캡처에 대한 신속하고 더러운 사용자 정의는 다음과 같습니다
@ 데이비드 탕의 솔루션에 따르면, 여기 Ctrl + A 조합 + Shift 키를 캡처에 대한 신속하고 더러운 사용자 정의는 다음과 같습니다
var pressedKeys = {}; function checkPressedKeys() { var shiftPressed=false, ctrlPressed=false, aPressed=false; for (var i in pressedKeys) { if (!pressedKeys.hasOwnProperty(i)) continue; if(i==16){ shiftPressed=true; } else if(i==17){ ctrlPressed=true; } else if(i==65){ aPressed=true; } } if(shiftPressed && ctrlPressed && aPressed){ //do whatever you want here. } } $(document).ready(function(){ $(document).keydown(function (e) { pressedKeys[e.which] = true; checkPressedKeys(); }); $(document).keyup(function (e) { delete pressedKeys[e.which]; }); });
-
8.당신이 esma6를 사용하는 경우, 다음과 같은 사용하여 설정을 할 수 있습니다.
당신이 esma6를 사용하는 경우, 다음과 같은 사용하여 설정을 할 수 있습니다.
const KEYS = new Set(); $(document).keydown(function (e) { KEYS.add(e.which); if(KEYS.has(12) && KEYS.has(31)){ //do something } }); $(document).keyup(function (e) { KEYS.delete(e.which); });
당신이 그들을 함께 눌러 사용자가 원하는 경우, 당신은 할 수 있습니다 :
const KEYS = new Set(); // for other purposes const RECENT_KEYS = new Set(); // the recently pressed keys const KEY_TIMELAPSE = 100 // the miliseconds of difference between keys $(document).keydown(function (e) { KEYS.add(e.which); RECENT_KEYS.add(e.which); setTimeout(()=>{ RECENT_KEYS.delete(e.which); }, KEY_TIMELAPSE); if(RECENT_KEYS.has(37) && RECENT_KEYS.has(38)){ // Do something } }); $(document).keyup(function (e) { KEYS.delete(e.which); RECENT_KEYS.delete(e.which); });
여기 codepen https://codepen.io/Programador-Anonimo/pen/NoEeKM?editors=0010입니다
from https://stackoverflow.com/questions/4954403/can-jquery-keypress-detect-more-than-one-key-at-the-same-time by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] jQuery로 유튜브 비디오를 중지? (0) | 2020.10.24 |
---|---|
[JQUERY] 자동 스케일링 입력 [TYPE = 텍스트] 값 폭을 위해? (0) | 2020.10.24 |
[JQUERY] 내가 jQuery를 개체에서 선택을받을 수있는 방법 (0) | 2020.10.24 |
[JQUERY] jQuery로 최초의 "N"항목을 선택 (0) | 2020.10.24 |
[JQUERY] 다른 페이지에서 ID에 jQuery를 스크롤 (0) | 2020.10.24 |