|
880 | 880 | if (keyElement.handlePressDown) { |
881 | 881 | keyElement.removeEventListener('touchstart', keyElement.handlePressDown); |
882 | 882 | keyElement.removeEventListener('touchend', keyElement.handlePressUp); |
883 | | - keyElement.removeEventListener('touchmove', keyElement.handlePressCancel); |
| 883 | + keyElement.removeEventListener('touchmove', keyElement.handlePressCancel); // 移除舊的 touchmove 綁定 |
884 | 884 | keyElement.removeEventListener('touchcancel', keyElement.handlePressCancel); |
885 | 885 | keyElement.removeEventListener('mousedown', keyElement.handlePressDown); |
886 | 886 | keyElement.removeEventListener('mouseup', keyElement.handlePressUp); |
|
939 | 939 |
|
940 | 940 | // 3. 處理取消 (Move/Leave/Cancel) |
941 | 941 | const handlePressCancel = (event) => { // 接受 event |
| 942 | + // **重要修正:touchmove 不再觸發此函數來取消計時器** |
942 | 943 | if (longPressTimer) { |
943 | 944 | clearTimeout(longPressTimer); |
944 | 945 | longPressTimer = null; |
945 | 946 | } |
946 | | - // *** 修正點 1:輕微的 touchmove 不再移除高亮,避免瞬間反白消失。*** |
947 | 947 | // 只有在滑鼠離開 (mouseleave) 或系統明確取消 (touchcancel) 時,才移除高亮。 |
948 | | - // 正常的 touchend/mouseup 會在 handlePressUp 中移除高亮。 |
949 | 948 | if (event.type === 'mouseleave' || event.type === 'touchcancel') { |
950 | 949 | keyElement.classList.remove('highlighted'); |
951 | 950 | } |
|
960 | 959 | keyElement.addEventListener('touchstart', handlePressDown); |
961 | 960 | keyElement.addEventListener('touchend', handlePressUp); |
962 | 961 | keyElement.addEventListener('touchcancel', handlePressCancel); // 處理觸摸中斷 |
963 | | - keyElement.addEventListener('touchmove', handlePressCancel); // 處理手指移動取消長按計時器 |
| 962 | + // *** 核心修正:移除此行,讓輕微的 touchmove 不會取消長按計時器 *** |
| 963 | + // keyElement.addEventListener('touchmove', handlePressCancel); // <--- 原有的問題代碼 |
964 | 964 |
|
965 | 965 | // Mouse Events (用於桌面測試) |
966 | 966 | keyElement.addEventListener('mousedown', handlePressDown); |
|
0 commit comments