0

その場でエディターを作成し ( http://epiceditor.com )、キー ショートカットを自動的に設定するライブラリがあります。ショートカットはオプションで設定できるのでe.altKeye.ctrlKey、 などは使用できません。

何らかの理由で、修飾キーがMac/Ubuntu ブラウザーで元に戻らないfalse 場合があります。

Windowsでは、毎回発生するようです。これを再現するには、JSBin で render をクリックしてからalt+を押しpます。「Yay」が表示されるはずです。ここで、Windows の場合はもう一度押します p。「Yay が再び表示されます。Mac および Ubuntu ユーザーは、この同じ問題を時折見ていますが、再現するのは困難です。

altまた、これは思われるキーでのみ発生することに注意してください。下には、18 (alt) の隣に 16 (shift) があります。これらを交換すると、期待どおりに機能します。

簡素化されたテスト ケースのコードは次のとおりです。

var modKey = false;
var modKeyCode = 18; //16
document.body.addEventListener('keydown', function (e) {
  if (!modKey && modKeyCode == e.keyCode) {
    modKey = true;
  }
  
  if (modKey && e.keyCode == 80) {
    console.log('Yay!');
  }
});

document.body.addEventListener('keyup', function (e) {
  if (modKey && modKeyCode == e.keyCode) {
    modKey = false;
  }
});

デモ: http://jsbin.com/uhupah/3/edit#javascript,html

4

2 に答える 2

0

現在、Linux ボックスにアクセスできないため、コードをテストできません。

したがって、ここにもっと提案があります:

Linux (私の経験では) は、キーコードとキーイベントの順序に関しては気難しいものです。おそらく、keyup の if(..) と keydown の if(..) を組み合わせる

if (!modKey && modKeyCode == e.keyCode) {
  modKey = true;
} else if (modKey && modKeyCode == e.keyCode) {
  modKey = false;
}

上記の提案は、'keydown' と 'keyup' の両方を指定する必要がないという前提で作成されています。

于 2012-06-27T06:07:10.200 に答える
0

一種のくだらない修正ですが、それでも修正を思いつきました。

私が行った修正は、キーの組み合わせが成功したときにモディファイア var をリセットすることでした。つまり、pinalt+pが押されたときに、次のmodKeyように false にリセットします。

var modKey = false;
var modKeyCode = 18; //16
document.body.addEventListener('keydown', function (e) {
  if (!modKey && modKeyCode == e.keyCode) {
    modKey = true;
  }

  if (modKey && e.keyCode == 80) {
    console.log('Yay!');
    modKey = false; //THIS
  }
});

document.body.addEventListener('keyup', function (e) {
  if (modKey && modKeyCode == e.keyCode) {
    modKey = false;
  }
});

これの問題は、キーコマンドを連続して実行できないことです。ユーザーは「保存」や「プレビュー」などのキーコマンドを実行し、さらに入力してから別のキーコマンドを実行するため、ほとんどの場合これで問題ありません。しかし、たとえば、キーを放さずalt+p sにトリガーすることはできません。alt+palt+salt

于 2012-06-27T14:51:23.243 に答える