From ceaf61c89bd85c1d33d21b75d7d25458dba61eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=84=AD=E6=B2=9B=E8=BB=92?= Date: Sat, 27 Sep 2025 21:57:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=A6=E7=8F=BEFlipMemoryTest?= =?UTF-8?q?=E5=8B=95=E6=85=8B=E9=AB=98=E5=BA=A6=E8=87=AA=E9=81=A9=E6=87=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除固定600px高度限制,改為根據背面內容動態計算 - 新增useEffect監聽內容變化並自動調整卡片高度 - 實現響應式設計,不同屏幕尺寸有對應的最小高度 - 移除背面滾動條,改為完全展示所有內容 - 優化CSS動畫過渡效果,提升翻卡體驗 - 新增底部留白避免內容貼邊 - 清理舊的備份測試文件 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../review/review-tests/FlipMemoryTest.tsx | 71 +++++++++++++++++-- .../learn/tests/FlipMemoryTest.tsx | 25 ------- .../learn/tests/SentenceFillTest.tsx | 36 ---------- .../learn/tests/SentenceReorderTest.tsx | 69 ------------------ .../learn/tests/VocabChoiceTest.tsx | 31 -------- .../learn-backup/learn/tests/index.ts | 4 -- 6 files changed, 65 insertions(+), 171 deletions(-) delete mode 100644 note/learn-backup/learn-backup/learn/tests/FlipMemoryTest.tsx delete mode 100644 note/learn-backup/learn-backup/learn/tests/SentenceFillTest.tsx delete mode 100644 note/learn-backup/learn-backup/learn/tests/SentenceReorderTest.tsx delete mode 100644 note/learn-backup/learn-backup/learn/tests/VocabChoiceTest.tsx delete mode 100644 note/learn-backup/learn-backup/learn/tests/index.ts diff --git a/frontend/components/review/review-tests/FlipMemoryTest.tsx b/frontend/components/review/review-tests/FlipMemoryTest.tsx index 0a9ace7..3a2a0f0 100644 --- a/frontend/components/review/review-tests/FlipMemoryTest.tsx +++ b/frontend/components/review/review-tests/FlipMemoryTest.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useState, useRef, useEffect } from 'react' import AudioPlayer from '@/components/AudioPlayer' interface FlipMemoryTestProps { @@ -28,6 +28,34 @@ export const FlipMemoryTest: React.FC = ({ }) => { const [isFlipped, setIsFlipped] = useState(false) const [selectedConfidence, setSelectedConfidence] = useState(null) + const [cardHeight, setCardHeight] = useState(400) + const frontRef = useRef(null) + const backRef = useRef(null) + + useEffect(() => { + const updateCardHeight = () => { + if (backRef.current) { + const backHeight = backRef.current.scrollHeight + + // 響應式最小高度設定 + const minHeightByScreen = window.innerWidth <= 480 ? 300 : + window.innerWidth <= 768 ? 350 : 400 + + // 以背面內容高度為準,不設最大高度限制 + const finalHeight = Math.max(minHeightByScreen, backHeight) + setCardHeight(finalHeight) + } + } + + // 延遲執行以確保內容已渲染 + const timer = setTimeout(updateCardHeight, 100) + + window.addEventListener('resize', updateCardHeight) + return () => { + clearTimeout(timer) + window.removeEventListener('resize', updateCardHeight) + } + }, [word, definition, example, synonyms]) const handleFlip = () => { if (!disabled) setIsFlipped(!isFlipped) @@ -63,14 +91,15 @@ export const FlipMemoryTest: React.FC = ({
{/* 正面 */}
@@ -106,10 +135,11 @@ export const FlipMemoryTest: React.FC = ({ {/* 背面 */}
-
+

翻卡記憶

@@ -117,7 +147,7 @@ export const FlipMemoryTest: React.FC = ({
-
+
{/* 定義區塊 */}

定義

@@ -186,7 +216,8 @@ export const FlipMemoryTest: React.FC = ({
diff --git a/note/learn-backup/learn-backup/learn/tests/FlipMemoryTest.tsx b/note/learn-backup/learn-backup/learn/tests/FlipMemoryTest.tsx deleted file mode 100644 index 3ef6d07..0000000 --- a/note/learn-backup/learn-backup/learn/tests/FlipMemoryTest.tsx +++ /dev/null @@ -1,25 +0,0 @@ -interface FlipMemoryTestProps { - currentCard: any - cardHeight: number - isFlipped: boolean - onFlip: () => void - onReportError: () => void - onNavigate: (direction: string) => void - currentCardIndex: number - totalCards: number - cardContainerRef: any - cardFrontRef: any - cardBackRef: any -} - -export const FlipMemoryTest: React.FC = (props) => { - return ( -
-

FlipMemoryTest 測驗組件

-

詞卡: {props.currentCard?.word}

- -
- ) -} \ No newline at end of file diff --git a/note/learn-backup/learn-backup/learn/tests/SentenceFillTest.tsx b/note/learn-backup/learn-backup/learn/tests/SentenceFillTest.tsx deleted file mode 100644 index 98abdc8..0000000 --- a/note/learn-backup/learn-backup/learn/tests/SentenceFillTest.tsx +++ /dev/null @@ -1,36 +0,0 @@ -interface SentenceFillTestProps { - currentCard: any - fillAnswer: string - showHint: boolean - showResult: boolean - onAnswerChange: (answer: string) => void - onSubmit: () => void - onToggleHint: () => void - onReportError: () => void - onNavigate: (direction: string) => void - currentCardIndex: number - totalCards: number - setModalImage: (image: string | null) => void -} - -export const SentenceFillTest: React.FC = (props) => { - return ( -
-

SentenceFillTest 測驗組件

-

詞卡: {props.currentCard?.word}

- props.onAnswerChange(e.target.value)} - className="border px-3 py-2 rounded mx-2" - placeholder="輸入答案" - /> - -
- ) -} \ No newline at end of file diff --git a/note/learn-backup/learn-backup/learn/tests/SentenceReorderTest.tsx b/note/learn-backup/learn-backup/learn/tests/SentenceReorderTest.tsx deleted file mode 100644 index 56e1b44..0000000 --- a/note/learn-backup/learn-backup/learn/tests/SentenceReorderTest.tsx +++ /dev/null @@ -1,69 +0,0 @@ -interface SentenceReorderTestProps { - currentCard: any - shuffledWords: string[] - arrangedWords: string[] - reorderResult: boolean | null - onWordClick: (word: string) => void - onRemoveFromArranged: (word: string) => void - onCheckAnswer: () => void - onReset: () => void - onReportError: () => void - onNavigate: (direction: string) => void - currentCardIndex: number - totalCards: number - setModalImage: (image: string | null) => void -} - -export const SentenceReorderTest: React.FC = (props) => { - return ( -
-

SentenceReorderTest 測驗組件

-

詞卡: {props.currentCard?.word}

- -
-

可用詞語:

-
- {props.shuffledWords.map((word, index) => ( - - ))} -
-
- -
-

你的句子:

-
- {props.arrangedWords.map((word, index) => ( - - ))} -
-
- -
- - -
-
- ) -} \ No newline at end of file diff --git a/note/learn-backup/learn-backup/learn/tests/VocabChoiceTest.tsx b/note/learn-backup/learn-backup/learn/tests/VocabChoiceTest.tsx deleted file mode 100644 index c8eb81a..0000000 --- a/note/learn-backup/learn-backup/learn/tests/VocabChoiceTest.tsx +++ /dev/null @@ -1,31 +0,0 @@ -interface VocabChoiceTestProps { - currentCard: any - quizOptions: string[] - selectedAnswer: string | null - showResult: boolean - onAnswer: (answer: string) => void - onReportError: () => void - onNavigate: (direction: string) => void - currentCardIndex: number - totalCards: number -} - -export const VocabChoiceTest: React.FC = (props) => { - return ( -
-

VocabChoiceTest 測驗組件

-

詞卡: {props.currentCard?.word}

-
- {props.quizOptions.map((option, index) => ( - - ))} -
-
- ) -} \ No newline at end of file diff --git a/note/learn-backup/learn-backup/learn/tests/index.ts b/note/learn-backup/learn-backup/learn/tests/index.ts deleted file mode 100644 index fd15331..0000000 --- a/note/learn-backup/learn-backup/learn/tests/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { FlipMemoryTest } from './FlipMemoryTest' -export { VocabChoiceTest } from './VocabChoiceTest' -export { SentenceFillTest } from './SentenceFillTest' -export { SentenceReorderTest } from './SentenceReorderTest' \ No newline at end of file