X-Git-Url: http://git.osdn.jp/view?p=pettanr%2FclientJs.git;a=blobdiff_plain;f=0.6.x%2Fjs%2F11_hid%2F01_KB.js;fp=0.6.x%2Fjs%2F11_hid%2F01_KB.js;h=88df0ce5f0d41a6be91f3ee3ffae69f2ba586199;hp=9d9646e5558b36c9c6722d1cf7d6aed0b027a625;hb=604668ba9efa027d4bc77fd8020d6b6be55d03e1;hpb=ef25747bebf1799d49f9bd0d64e339da9ea61d13 diff --git a/0.6.x/js/11_hid/01_KB.js b/0.6.x/js/11_hid/01_KB.js index 9d9646e..88df0ce 100644 --- a/0.6.x/js/11_hid/01_KB.js +++ b/0.6.x/js/11_hid/01_KB.js @@ -4,10 +4,6 @@ * keydown について。Firefox では押している間中リスナの関数が実行される * デフォルトイベントの制御・抑止 (opera)keypress を用いる。 * - * キーイベント処理の工夫 - * http://www.keynavi.net/ja/tipsj/kfunc.html - * keydown/up時にピリオドが文字化け (IE4-6) IE4+では「keypress」でキーコードを処理する 但しCtrlやALTが押されている場合は逆にkeydownで処理する必要があります - * * * keydown をトリガーにイベントを発火するもの * 1. テンキーの 0~9 keyCode:96-105 @@ -25,8 +21,8 @@ var X_KB_SPECIALS = eval( // IE5- 対策 "'33':'PAGE_UP','34':'PAGE_DOWN','35':'END','36':'HOME','37':'CSR_L','38':'CSR_U','39':'CSR_R','40':'CSR_D'," + "'44':'PRT_SCRN','45':'INS','46':'DEL'," + "'91':'LWIN','92':'RWIN','93':'APP'," + - "'96':48,'97':49,'98':50,'99':51,'100':52,'101':53,'102':54,'103':55,'104':56,'105':57,'106':42,'107':43,'109':45," + - "'111':47,'112':'F1','113':'F2','114':'F3','115':'F4','116':'F5','117':'F6','118':'F7','119':'F8','120':'F9','121':'F10','122':'F11','123':'F12'," + + "'96':48,'97':49,'98':50,'99':51,'100':52,'101':53,'102':54,'103':55,'104':56,'105':57,'106':42,'107':43,'109':45,'110':46,'111':47," + + "'112':'F1','113':'F2','114':'F3','115':'F4','116':'F5','117':'F6','118':'F7','119':'F8','120':'F9','121':'F10','122':'F11','123':'F12'," + "'144':'NUM_LOCK','145':'SCROLL_LOCK','208':'CAPS_LOCK','240':'CAPS_LOCK','242':'K/H','243':'H/Z','244':'H/Z'})" ), X_KB_DOWN_KEYS = {}, X_KB_CANCELED = {}, @@ -34,6 +30,8 @@ var X_KB_SPECIALS = eval( // IE5- 対策 X_KB_lastKeyCode = 0, X_KB_TRANSFOEM = {}, + // TODO keyevent のためには input 等にフォーカスが必要 -> iOS + X_kbManager = X_Class_override( X_EventDispatcher(), @@ -42,14 +40,16 @@ var X_KB_SPECIALS = eval( // IE5- 対策 var keyCode = e.keyCode, // keyCode says something about the actual keyboard key the user pressed chrCode = e.charCode, // while charCode gives the ASCII value of the resulting character cb = X_CALLBACK_NONE, - special, _keyCode; + special; - console.log( e.type + ' > keyCode:' + keyCode + ' chrCode:' + chrCode ); + // console.log( e.type + ' > keyCode:' + keyCode + ' chrCode:' + chrCode ); switch( e.type ){ case 'keydown' : if( X_KB_DOWN_KEYS[ keyCode ] ){ // 既に押されている、メタキー[shift,ctrl,alt]の変化はある? + console.log( ' doen -- ' ); + return X_KB_CANCELED[ keyCode ] ? X_CALLBACK_PREVENT_DEFAULT : cb; } else if( special = X_KB_SPECIALS[ keyCode ] ){ @@ -87,13 +87,32 @@ var X_KB_SPECIALS = eval( // IE5- 対策 }; */ } else { X_KB_lastKeyCode = keyCode; - }; + + if( e.ctrlKey || e.altKey || e.metaKey ){ + cb = this[ 'dispatch' ]( { + type : 'keydown', + keyCode : 0, + charCode : chrCode, + 'keyName' : '', + 'is10key' : false, + shiftKey : !!X_KB_DOWN_KEYS[ 16 ], + ctrlKey : !!X_KB_DOWN_KEYS[ 17 ], + altKey : !!X_KB_DOWN_KEYS[ 18 ], + metaKey : !!X_KB_DOWN_KEYS[ 224 ] + } ); + + if( cb & X_CALLBACK_PREVENT_DEFAULT ){ + X_KB_CANCELED[ keyCode ] = true; + }; + }; + console.log( ' keydown[' + keyCode + ']' + String.fromCharCode( chrCode ) + chrCode ); + }; return cb; case 'keypress' : // keydown 側で発火しているものは再び発火しない - if( X_KB_DOWN_KEYS[ chrCode ] ){ + // TODO keypress return X_KB_CANCELED[ chrCode ] ? X_CALLBACK_PREVENT_DEFAULT : cb; } else if( keyCode === 32 ){ @@ -117,6 +136,8 @@ var X_KB_SPECIALS = eval( // IE5- 対策 X_KB_lastIs10Key = false; console.log( X_KB_lastKeyCode + 'keypress : chrCode:' + chrCode + ' down:' + X_KB_DOWN_KEYS[ chrCode ] + ( X_KB_CANCELED[ chrCode ] ? ' Cancel!' : '' ) ); + } else { + console.log( '>> keypress : chrCode:' + chrCode + ' down:' + X_KB_DOWN_KEYS[ chrCode ] + ( X_KB_CANCELED[ chrCode ] ? ' Cancel!' : '' ) ); }; return cb; @@ -156,7 +177,7 @@ var X_KB_SPECIALS = eval( // IE5- 対策 chrCode = 0; }; - console.log( keyCode + ' keyup ' + chrCode ); + //console.log( keyCode + ' keyup ' + chrCode ); cb |= this[ 'dispatch' ]( { type : 'keyup',