2017-07-16 5 views
2

私はkeyupイベントとkeydownイベントをキャッチする方法を知っています。keydownイベントを捕捉せずに修飾キーが押されているかどうかを確認する方法はありますか?

私のプログラムでは、プログラムがキーのキーダウンイベントを観測していない場合でも、どのメタキー(たとえば、メタキー、コントロールキー、altキーなど)が押されているのかを確認したい。

私は、クリックイベントや他のイベントが、どのモディファイアキーが発射されたときに押されたのかを知ることができますが、プログラムが発生するのを待つことができません。

モディファイアキーを定期的に(たとえば、100msごとに)チェックするプログラムが必要です。これをどうやってやりますか?私のプログラムはjQueryを使ってそれが役に立ちます。

+1

あなたはイベントリスナーを使用しない限り、これを行うことはできません。 –

+1

どのモディファイアキーが押されたのか知るためには、実際のイベント(シミュレートされていないイベント)を起動する必要がありますか? – Sophtware

+2

以下の答えが受け入れられない場合は、おそらくX Yの問題があると言います。 *あなたがしようとしていることを私たちに伝えるのではなく、あなたが実際に解決しようとしている問題について説明してください。つまり、なぜあなたはこれをしたいのですか?より良い方法があるかもしれません。 – DelightedD0D

答えて

3

これらの値を変数に格納し、必要に応じていつでもチェックすることができます。イベントリスナーは、その変数を更新するために、もちろん必要になります。

// assume no hot key is pressed 
 

 
var object = { 
 
    ctrlKey: false, 
 
    altKey: false, 
 
    shiftKey: false 
 
}; 
 

 
// update whenever a keydown or keyup event is fired 
 

 
document.addEventListener("keydown", function(e) { 
 
    for(var key in object) { 
 
    if(object.hasOwnProperty(key)) 
 
     object[key] = e[key]; // update the object from the event e 
 
    } 
 
}); 
 

 
document.addEventListener("keyup", function(e) { 
 
    for(var key in object) { 
 
    if(object.hasOwnProperty(key)) 
 
     object[key] = e[key]; 
 
    } 
 
}); 
 

 
// testing example: 
 

 
function check() { 
 
    console.log("Checking:"); 
 
    console.log("Alt key:", object.altKey); 
 
    console.log("Ctrl key:", object.ctrlKey); 
 
    console.log("Shift key:", object.shiftKey); 
 
} 
 

 
setInterval(check, 1000); // calling check every second without waiting for an event to occur

+0

残念ながら、問題は私のプログラムが最初の行から前提を作ることができないことです。修飾子キーが最初に押されていたかどうかはわかりません。 – Sophtware

+1

@Sophtwareプログラムはそのような前提を作りません。単に押されていないキーで始まります。修飾キーを押したままユーザーがページを読み込んでいない限り、これはうまくいくはずです – DelightedD0D

+0

@Sophtware他の方法はないと思います。イベントをシミュレートすると、ホットキーが押されたかどうかは分かりません。 –

関連する問題