feat(练习): 添加 Ctrl+H 快捷键显示答案
- ProcessPracticePage: 按住 Ctrl+H 显示答案,松开隐藏 - ProcessDetailPage: 按住 Ctrl+H 显示答案,松开隐藏 - 解决手在键盘上时不方便点击屏幕查看答案的问题 via [HAPI](https://hapi.run) Co-Authored-By: HAPI <noreply@hapi.run>
This commit is contained in:
@@ -177,6 +177,39 @@ export function ProcessDetailPage() {
|
|||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [id])
|
}, [id])
|
||||||
|
|
||||||
|
// Ctrl+H 快捷键显示/隐藏答案
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isPracticeMode) return
|
||||||
|
|
||||||
|
const handleKeyDown = (e: KeyboardEvent) => {
|
||||||
|
if (e.ctrlKey && e.key === 'h') {
|
||||||
|
e.preventDefault()
|
||||||
|
if (!showAnswer) {
|
||||||
|
setShowAnswer(true)
|
||||||
|
setInputLocked(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleKeyUp = (e: KeyboardEvent) => {
|
||||||
|
if (e.key === 'Control' || e.key === 'h') {
|
||||||
|
if (showAnswer) {
|
||||||
|
setShowAnswer(false)
|
||||||
|
setInputLocked(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('keydown', handleKeyDown)
|
||||||
|
window.addEventListener('keyup', handleKeyUp)
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('keydown', handleKeyDown)
|
||||||
|
window.removeEventListener('keyup', handleKeyUp)
|
||||||
|
}
|
||||||
|
}, [isPracticeMode, showAnswer])
|
||||||
|
|
||||||
|
|
||||||
// ── 验证逻辑 ──────────────────────────────────────────────────────────────
|
// ── 验证逻辑 ──────────────────────────────────────────────────────────────
|
||||||
const validateInput = useCallback(
|
const validateInput = useCallback(
|
||||||
(input: string[]) => {
|
(input: string[]) => {
|
||||||
|
|||||||
@@ -319,6 +319,34 @@ export default function ProcessPracticePage() {
|
|||||||
return () => clearTimeout(timer)
|
return () => clearTimeout(timer)
|
||||||
}, [showAnswerForCell, restoreFocus])
|
}, [showAnswerForCell, restoreFocus])
|
||||||
|
|
||||||
|
// Ctrl+H 快捷键显示/隐藏答案
|
||||||
|
useEffect(() => {
|
||||||
|
const handleKeyDown = (e: KeyboardEvent) => {
|
||||||
|
if (e.ctrlKey && e.key === 'h') {
|
||||||
|
e.preventDefault()
|
||||||
|
if (currentCellId && !showAnswerForCell) {
|
||||||
|
handleLongPress(currentCellId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleKeyUp = (e: KeyboardEvent) => {
|
||||||
|
if (e.key === 'Control' || e.key === 'h') {
|
||||||
|
if (showAnswerForCell) {
|
||||||
|
handleLongPressEnd()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('keydown', handleKeyDown)
|
||||||
|
window.addEventListener('keyup', handleKeyUp)
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('keydown', handleKeyDown)
|
||||||
|
window.removeEventListener('keyup', handleKeyUp)
|
||||||
|
}
|
||||||
|
}, [currentCellId, showAnswerForCell, handleLongPress, handleLongPressEnd])
|
||||||
|
|
||||||
// 点击格子切换(允许回顾已答对的格子)
|
// 点击格子切换(允许回顾已答对的格子)
|
||||||
const handleCellClick = useCallback(
|
const handleCellClick = useCallback(
|
||||||
(cellId: string) => {
|
(cellId: string) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user