Metlivi 部落格

如何防止鍵盤控制干擾滑鼠驅動的滑塊拼圖

如果您正在建置一個瀏覽器端滑塊拼圖來做為桌上冒險遊戲的輔助工具,請讓滑鼠拖曳與鍵盤移動操作相同的拼圖狀態,同時將鍵盤快速鍵的作用範圍限定在拼圖內。關鍵的檢查項目是焦點、事件處理和拖曳完成狀態:在文字欄位中按下按鍵不應移動圖塊,而當指標跨越圖塊邊界時,拖曳也不應中斷或失效。

2026年10月15日閱讀時間 6 分鐘作者:Metlivi Editorial Team
第 1 節

首先確認是什麼原因導致拼圖發生非預期的移動

當拼圖在滑鼠操作過程中對方向鍵產生反應時,原因通常是鍵盤監聽器的範圍過於寬泛。附加至 document 或 window 的處理常式,即使在玩家於線索欄位中輸入內容、使用選單或與其他控制項互動時,仍會接收到方向鍵事件。它還可能在變更拼圖的同時觸發瀏覽器行為(例如捲動頁面)。

透過簡短的檢查清單來重現問題:按一下圖塊並進行拖曳;拖曳越過拼圖邊界;在拼圖具有焦點時按下方向鍵;接著在線索輸入框、按鈕或選單具有焦點時按下方向鍵。注意棋盤是否變動、頁面是否捲動、焦點是否轉移,或拖曳是否停止。這些觀察有助於區分是拼圖處理常式的問題,還是指標追蹤或瀏覽器預設行為所致。

第 2 節

為拼圖設定明確的焦點邊界

將棋盤視為具有明確鍵盤入口點的控制項。使用可聚焦的棋盤容器,並且僅在該棋盤處於作用中狀態,或是焦點位於棋盤所擁有的圖塊上時,才處理拼圖按鍵。將不相關的控制項(例如提示按鈕和文字欄位)保持在此按鍵處理邊界之外。讓焦點位置清晰可見,以便玩家能判斷棋盤何時會做出回應。

在解譯按鍵之前,請先檢查事件目標。如果焦點位於輸入框、文字區域、可編輯元素或獨立按鈕中,請不要處理該按鍵。對於合作冒險工具而言,當一名玩家正在輸入符文、名稱或線索,而另一名玩家正在操作拼圖時,這一點尤為重要:打字不應演變成意外的圖塊移動。

鍵盤操作仍然必須可用。W3C 的指引說明,在可能的情況下,功能應可透過鍵盤介面使用,並指出將物件移動到特定位置是可由鍵盤操作的動作。請仔細劃定按鍵的作用範圍,而不是完全移除它們。W3C:瞭解成功準則 2.1.1:鍵盤

第 3 節

將拼圖指令與瀏覽器預設行為分開

為棋盤選擇一組少量且有記錄說明的按鍵,例如當棋盤聚焦時的方向鍵。在處理常式中,首先確認該按鍵是拼圖所使用的按鍵,且棋盤為作用中的目標。只有在確認後才套用移動,並在必要時取消該按鍵的瀏覽器預設動作。避免全域抑制所有按鍵:玩家可能需要正常的文字輸入、瀏覽器導覽以及拼圖之外的控制項操作。

preventDefault() 會在事件可取消時取消瀏覽器的預設動作,但它不會阻止事件傳播至其他處理常式。這意味著它可以防止頁面捲動,但無法解決另一個同樣會移動圖塊的監聽器問題。找出並縮小變更遊戲狀態的處理常式範圍;不要用廣泛的取消動作來替代明確的事件歸屬權。MDN:Event:preventDefault() 方法

第 4 節

確保指標拖曳在整個棋盤上保持完整

對於拖曳互動,從開始拖曳的按下操作到釋放或取消,都應持續追蹤單一作用中的指標。指標事件提供了 pointerdown、pointermove、pointerup 和 pointercancel;指標擷取(pointer capture)即使在指標移出原始點擊區域時,也能將後續的指標事件持續導向棋盤。在 pointerup 和 pointercancel 時都要清除作用中的拖曳狀態,以避免中斷的手勢讓拼圖卡在拖曳狀態。MDN:指標事件 (Pointer events)

避免以遺失指標追蹤的方式重建或替換被拖曳的圖塊。如果介面在拖曳過程中於 DOM 中移動了元素,MDN 指出應在該移動之後設定指標擷取。決定當指標在無效位置釋放時會發生什麼事:對於滑塊拼圖而言,將圖塊復原至先前位置或吸附至合法位置,比靜默變更無關圖塊更容易讓人理解。

第 5 節

提供無需拖曳即可執行相同移動的方式

拼圖可以同時支援滑鼠、鍵盤和簡易的指標輸入。例如,按一下或點選與空格相鄰的圖塊可以移動它;拖曳該圖塊可以是可選的直接操作手勢;而聚焦棋盤的方向鍵則可提供鍵盤操作。這些輸入都應該呼叫相同的移動驗證邏輯,這樣無論透過何種方式發起請求,移動的合法性判定或拒絕標準都能保持一致。

這也提供了一個有用的設計檢查:玩家是否能在不拖曳的情況下,僅透過按一下或點選來完成拼圖?W3C 的 WCAG 2.2 指引將鍵盤無障礙存取與拖曳動作的單指標替代方案視為獨立的事項。其範例包括使用方向控制項上的點擊來取代拖曳。僅提供鍵盤替代方案本身並不能滿足該指標替代方案的需求。W3C:瞭解成功準則 2.5.7:拖曳動作

對於滑塊拼圖,每次點擊一個相鄰圖塊通常是一種很自然的替代方式,因為它保留了拼圖的「相鄰移動」規則。如果該互動不夠明確,可見的移動按鈕可以清楚說明可用的方向。W3C 的 G219 技術提供了單指標控制項的範例,這些控制項無需拖曳即可執行相同的底層動作。W3C:G219:確保為針對內容操作的拖曳動作提供替代方案

第 6 節

使用簡短的輸入矩陣進行測試

在將拼圖應用於遊戲之前,請使用相同的棋盤配置和初始狀態測試每種輸入路徑。確認合法移動只更新棋盤一次、無效移動保持棋盤不變,且不相關的控制項維持其正常行為。

  • 滑鼠: 拖曳合法圖塊,在棋盤外釋放,並嘗試進行非法移動。確認棋盤既不會遺失拖曳狀態,也不會發生非預期的變化。

  • 鍵盤: 聚焦棋盤,使用每個受支援的方向,然後將焦點移至文字欄位並打字。確認只有聚焦於棋盤的按鍵會移動圖塊,且打字不會捲動頁面或改動棋盤。

  • 無拖曳的指標操作: 按一下或點選合法的相鄰圖塊。確認它能產生與其他輸入方法相同的移動效果。

  • 中斷操作: 取消或放棄拖曳,然後開始另一次拖曳。確認沒有殘留過期的選取狀態。

如果測試失敗,請先檢查最相關的狹窄層級:針對鍵盤行為檢查事件目標和焦點狀態;針對中斷的拖曳檢查指標擷取和清理作業;針對不一致的規則檢查共用的移動驗證器。這個流程為製作者提供了找出問題的具體方法,而不會把冒險道具變成複雜的通用控制項教學。

第 7 節

資料來源

相關閱讀

繼續探索這個主題