JS のキーボード イベントに関する問題があります。
まず第一に、jQuery メソッドを使用するように私に答えないでください。私はそのほとんど (バインド/アンバインド、オン/オフ、1 つ...) を知っていますが、 jQuery がなくても動作する必要がある内部フレームワークを使用しています。ほとんどのプロジェクトで使用されています。
それで、私はモジュールを持っています。実際には、 Swipe.jsに基づいており、Webおよびモバイル環境で動作するように拡張されたスワイプツールです(IE 7以降、WebKit(ChromeおよびSafari)、Moz、Opera、およびIE10 / Windows Phoneに必要な互換性)
マウス/タッチ イベントに問題はありませんが、モバイル HTML5 BPから着想を得たバインドおよびバインド解除メソッドは、detachEvents メソッドの小さな修正で非常にうまく機能するようです。
そして、「keydown」イベントに基づくキーボード コントロール機能を実装します。(ところで、keypressEvent.preventDefault()が小さなスクロール効果を妨げないことを除いて、keydonイベントとkeypressイベントの間に良い違いがあるかどうかはわかりません。したがって、keydownを使用します。)
同じページに多くのスワイプを追加できるため、キーダウン イベントのリッスンを開始するのは、いずれかのスワイプがフォーカスされている場合のみです (要素がフォーカスされるように「tabindex」属性を追加していることに注意してください)。
<div id="swipe1" class="swipe" tabindex='0'>
<ul>
[...]
</ul>
</div>
次に、スワイプが「touchstart」/「click」/「MSPointerDown」イベントを処理するときに、フォーカスします:
onTouchStart: function(e) {
this.container.focus(); // Refers to the div#swipe1.swipe element
[...]
return false;
}
onFocus: function (e) {
if (this.activateKeyboardControls) { // Keyboard control is optional
this.addListener(document, 'keydown', this, true);
}
}
onBlur: function (e) {
if (this.activateKeyboardControls) { // Keyboard control is optional
this.removeListener(document, 'keydown', this, true);
}
}
残念ながら、removeListener は機能しません。
つまり、要素がフォーカスを失った (blur イベントが発生した) 場合でも、キーダウン イベントを処理します...
ドキュメントオブジェクトにバインドされているためですか?いくつかのブール値で動作するいくつかのソリューションを読みましたが、それを管理するよりクリーンな方法を探しています。
多くのスワイプにフォーカスを当てると、キーボードを押すとそれぞれがスワイプされるため、これは面倒です。