@@ -416,6 +416,7 @@ <h2>輸入法模式:</h2>
416416 const searchInput = document . getElementById ( 'search-input' ) ;
417417 const searchResult = document . getElementById ( 'search-result' ) ;
418418 const modeDisplay = document . getElementById ( 'mode-display' ) ;
419+ const allKeys = document . querySelectorAll ( '.key' ) ;
419420
420421 // --- 載入碼表檔案(已修復) ---
421422 async function loadCodemap ( filePath ) {
@@ -575,8 +576,13 @@ <h2>輸入法模式:</h2>
575576 'a' : 'a' , 's' : 's' , 'd' : 'd' , 'f' : 'f' , 'g' : 'g' , 'h' : 'h' , 'j' : 'j' , 'k' : 'k' , 'l' : 'l' ,
576577 'z' : 'z' , 'x' : 'x' , 'c' : 'c' , 'v' : 'v' , 'b' : 'b' , 'n' : 'n' , 'm' : 'm'
577578 } ;
578-
579579 const inputKey = keyMap [ key ] || key ;
580+
581+ // 處理按鍵反白效果
582+ const pressedKey = document . querySelector ( `.key[data-code='${ inputKey } ']` ) ;
583+ if ( pressedKey ) {
584+ pressedKey . classList . add ( 'active' ) ;
585+ }
580586
581587 // 處理 Shift 鍵切換模式
582588 if ( event . key === "Shift" ) {
@@ -601,23 +607,43 @@ <h2>輸入法模式:</h2>
601607 }
602608
603609 // 在中文模式下處理
604- if ( inputKey ) {
610+ // 修正:處理數字鍵的邏輯
611+ if ( event . key >= '0' && event . key <= '9' ) {
605612 event . preventDefault ( ) ; // 阻止瀏覽器默認行為
606- handleKey ( inputKey ) ;
607- } else if ( event . key >= '1' && event . key <= '9' ) {
608613 const index = parseInt ( event . key , 10 ) - 1 ;
609- if ( index < currentCandidates . length ) {
614+ if ( currentCandidates . length > 0 && index >= 0 && index < currentCandidates . length ) {
615+ // 有候選字,且數字鍵在範圍內,則選字
610616 output . textContent += currentCandidates [ index ] ;
611617 resetInputState ( ) ;
618+ } else {
619+ // 無候選字,直接輸出數字
620+ output . textContent += event . key ;
621+ resetInputState ( ) ;
612622 }
623+ } else if ( inputKey ) {
624+ event . preventDefault ( ) ; // 阻止瀏覽器默認行為
625+ handleKey ( inputKey ) ;
613626 } else if ( event . key . length === 1 ) { // 處理未映射的單個字元
614627 output . textContent += event . key ;
615628 }
616629 } ) ;
630+
631+ // 監聽實體鍵盤放開事件,移除按鍵反白
632+ document . addEventListener ( 'keyup' , ( event ) => {
633+ const key = event . key . toLowerCase ( ) ;
634+ const keyMap = {
635+ // ... key mappings
636+ } ;
637+ const releasedKey = keyMap [ key ] || key ;
638+ const releasedKeyDiv = document . querySelector ( `.key[data-code='${ releasedKey } ']` ) ;
639+ if ( releasedKeyDiv ) {
640+ releasedKeyDiv . classList . remove ( 'active' ) ;
641+ }
642+ } ) ;
617643
618644 // 處理鍵盤與物理鍵盤的共用邏輯
619645 function handleKey ( key ) {
620- const validCodeKeys = "1234567890abcdefghijklmnopqrstuvwxyz ;',./" ;
646+ const validCodeKeys = "abcdefghijklmnopqrstuvwxyz ;',./" ;
621647
622648 if ( validCodeKeys . includes ( key ) && currentCode . length < 3 ) {
623649 currentCode += key ;
0 commit comments