JavaScript 独自イベントを作成し、キーバインドの有効・無効を切り替える
elm.addEventListener( "show", function(){
window.dispatchEvent(evInputStart);
});
elm.addEventListener( "hide", function(){
window.dispatchEvent(evInputEnd);
});
// キーバインドなし
return;
}
function dispatchKeyEvent(e) {
map[e.keyCode] = e.type == 'keydown';
if (isArrowKey(e)) {
// 矢印キー押下時はデフォルトのカーソルキー押下イベントをキャンセル
e.preventDefault();
}
// キーバインドで行いたい処理をここに書く
}
// 初期状態はキーバインドなし
window.onkeydown = window.onkeyup = avoidKeyEvent;
var evInputStart = new Event('InputStart');
window.addEventListener("InputStart", function(e) {
window.onkeydown = window.onkeyup = avoidKeyEvent;
});
var evInputEnd = new Event('InputEnd');
window.addEventListener("InputEnd", function(e) {
window.onkeydown = window.onkeyup = dispatchKeyEvent;
});
①独自イベントを2つ作成(new Event
②それぞれのイベントリスナで、キーダウン、キーアップに対する関数を設定する
(一方はキーバインド処理をする関数を指定し、他方はキーバインドなしの関数を指定する)
③キーバインドを有効にしたいときは、有効な関数を設定したイベントリスナのイベントをディスパッチ(window.dispatchEvent)する
④無効にしたいときは以下略
上の例では、あるエレメントのshowイベント発火時にキーバインドを無効にし、hideイベント発火時にキーバインドを有効にしている。
※そのままコピペしても動かないので注意。