# 詞彙學習 - UI設計規範 **文件版本**: 1.0 **建立日期**: 2025-09-27 **目標讀者**: 前端實作工程師、UI設計師 **用途**: HTML/CSS實作、視覺設計、組件規範 **配合文檔**: [智能複習系統-開發指南.md](/note/智能複習/智能複習系統-開發指南.md) - 系統架構和業務邏輯 **來源**: 從備份檔案 `page-v1-original.tsx` 提取的完整UI設計規格 --- ## 📋 總體設計架構 ### 核心測驗類型 該系統包含6種主要測驗類型: 1. **翻卡記憶** (flip-memory) 2. **詞彙選擇** (vocab-choice) 3. **例句填空** (sentence-fill) 4. **例句重組** (sentence-reorder) 5. **聽力測驗** (listening - vocab-listening, sentence-listening) 6. **口說測驗** (speaking - sentence-speaking) ### 共同設計元素 #### 通用容器結構 ```jsx
{/* 錯誤回報按鈕 */}
{/* 主要內容區 */}
{/* 測驗內容 */}
{/* 導航按鈕 */}
``` #### 通用標題區 ```jsx

{測驗名稱}

{currentCard.difficultyLevel}
``` #### 配色方案 - **主色調**: `bg-primary`, `text-white`, `hover:bg-primary-dark` - **次要色調**: `bg-gray-500`, `hover:bg-gray-600` - **成功狀態**: `bg-green-50`, `border-green-200`, `text-green-700` - **錯誤狀態**: `bg-red-50`, `border-red-200`, `text-red-700` - **提示狀態**: `bg-yellow-50`, `border-yellow-200`, `text-yellow-800` - **信息狀態**: `bg-blue-50`, `border-blue-200`, `text-blue-700` --- ## 🔄 1. 翻卡記憶 (flip-memory) ### 核心特色 - 3D翻卡動畫效果 - 正面顯示單字,背面顯示詳細資訊 - 信心等級評估系統 ### HTML結構 ```jsx
{/* 正面 */}
{/* 標題區 */}

翻卡記憶

{difficultyLevel}
{/* 指示文字 */}

點擊卡片翻面,根據你對單字的熟悉程度進行自我評估:

{/* 單字顯示區 */}

{word}

{pronunciation}
{/* 背面 */}
{/* 定義區塊 */}

定義

{definition}

{/* 例句區塊 */}

例句

{example}

{exampleTranslation}

{/* 同義詞區塊 */}

同義詞

{synonyms.map(synonym => ( {synonym} ))}
{/* 信心等級評估區 */}

你對這個單字的熟悉程度:

{[1, 2, 3, 4, 5].map(level => ( ))}
``` ### CSS動畫樣式 ```css .card-container { perspective: 1000px; transition: height 0.3s ease; overflow: visible; position: relative; } .card { position: relative; width: 100%; height: 100%; text-align: center; transition: transform 0.6s ease; transform-style: preserve-3d; } .card.flipped { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; align-items: stretch; justify-content: center; top: 0; left: 0; } .card-back { transform: rotateY(180deg); } ``` --- ## 🎯 2. 詞彙選擇 (vocab-choice) ### 核心特色 - 四選一選擇題 - 顯示詞彙定義,選擇對應單字 - 即時反饋系統 ### HTML結構 ```jsx
{/* 標題區 */}

詞彙選擇

{difficultyLevel}
{/* 指示文字 */}

請選擇符合上述定義的英文詞彙:

{/* 定義顯示區 */}

定義

{definition}

{/* 選項區域 */}
{quizOptions.map((option, idx) => ( ))}
{/* 結果反饋區 */} {showResult && (

{selectedAnswer === correctAnswer ? '正確!' : '錯誤!'}

{selectedAnswer !== correctAnswer && (

正確答案是:{correctAnswer}

)}
{pronunciation}

例句:{example}

翻譯:{exampleTranslation}

)}
``` --- ## ✏️ 3. 例句填空 (sentence-fill) ### 核心特色 - 內嵌式輸入框設計 - 動態寬度調整 - 提示系統 - 支援圖片顯示 ### HTML結構 ```jsx
{/* 標題區 */}

例句填空

{difficultyLevel}
{/* 圖片區(如果有) */} {exampleImage && (

圖片提示

Example illustration setModalImage(exampleImage)} />
)} {/* 指示文字 */}

請點擊例句中的空白處輸入正確的單字:

{/* 填空句子區域 */}
{/* 動態生成填空句子 */} {sentence.split(targetWord).map((part, index) => { const isTargetWord = index > 0; return ( {part} {isTargetWord && ( setFillAnswer(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter' && !showResult && fillAnswer.trim()) { handleFillAnswer() } }} placeholder="" disabled={showResult} className={`inline-block px-2 py-1 text-center bg-transparent focus:outline-none disabled:bg-gray-100 ${ fillAnswer ? 'border-b-2 border-blue-500' : 'border-b-2 border-dashed border-gray-400 focus:border-blue-400 focus:border-solid' }`} style={{ width: `${Math.max(100, Math.max(targetWord.length * 12, fillAnswer.length * 12 + 20))}px` }} /> {!fillAnswer && ( ____ )} )} ) })}
{/* 操作按鈕 */}
{!showResult && fillAnswer.trim() && ( )}
{/* 提示區域 */} {showHint && (

詞彙定義:

{definition}

)} {/* 結果反饋區 */} {showResult && (

{fillAnswer.toLowerCase().trim() === targetWord.toLowerCase() ? '正確!' : '錯誤!'}

{fillAnswer.toLowerCase().trim() !== targetWord.toLowerCase() && (

正確答案是:{targetWord}

)}

發音: {pronunciation}

完整例句:"{completeExample}"

翻譯:"{exampleTranslation}"

)}
``` --- ## 🧩 4. 例句重組 (sentence-reorder) ### 核心特色 - 拖拽式單字重組 - 雙區域設計(可用單字區 + 重組區域) - 即時狀態反饋 ### HTML結構 ```jsx
{/* 標題區 */}

例句重組

{difficultyLevel}
{/* 圖片區(如果有) */} {exampleImage && (

圖片提示

Example illustration setModalImage(exampleImage)} />
)} {/* 重組區域 */}

重組區域:

{arrangedWords.length === 0 ? (
將下方單字拖拽到這裡組成完整句子
) : (
{arrangedWords.map((word, index) => (
handleRemoveFromArranged(word)} > {word} ×
))}
)}
{/* 指示文字 */}

點擊下方單字,依序重組成正確的句子:

{/* 可用單字區域 */}

可用單字:

{shuffledWords.length === 0 ? (
所有單字都已使用
) : (
{shuffledWords.map((word, index) => ( ))}
)}
{/* 控制按鈕 */}
{arrangedWords.length > 0 && ( )}
{/* 結果反饋區 */} {reorderResult !== null && (

{reorderResult ? '正確!' : '錯誤!'}

{!reorderResult && (

正確答案是:{correctSentence}

)}

{translation}

)}
``` --- ## 🎧 5. 聽力測驗 (listening) ### 5.1 詞彙聽力 (vocab-listening) ```jsx
{/* 標題區 */}

詞彙聽力

{difficultyLevel}
{/* 指示文字 */}

請聽發音並選擇正確的英文單字:

{/* 音頻播放區 */}

發音

{pronunciation}
{/* 選項區域 - 2x2網格布局 */}
{options.map((word) => ( ))}
{/* 結果反饋區 */} {showResult && (

{selectedAnswer === correctAnswer ? '正確!' : '錯誤!'}

正確單字:{correctAnswer}

定義:{definition}

)}
``` ### 5.2 例句聽力 (sentence-listening) ```jsx
{/* 標題區 */}

例句聽力

{difficultyLevel}
{/* 指示文字 */}

請聽例句並選擇正確的選項:

{/* 音頻播放區 */}

點擊播放聽例句

{/* 選項區域 - 垂直列表布局 */}
{sentenceOptions.map((sentence, idx) => ( ))}
{/* 結果反饋區 */} {showResult && (

{selectedAnswer === correctSentence ? '正確!' : '錯誤!'}

{correctSentence}

{translation}

)}
``` --- ## 🎤 6. 口說測驗 (sentence-speaking) ### 核心特色 - 整合 VoiceRecorder 組件 - 語音識別評估 - 即時反饋系統 ### HTML結構 ```jsx
{/* 標題區 */}

例句口說

{difficultyLevel}
{/* VoiceRecorder 組件區域 */}
{ handleSpeakingAnswer(example) }} />
{/* 結果反饋區 */} {showResult && (

錄音完成!

系統正在評估你的發音...

)}
``` --- ## 📊 進度條系統設計 ### 雙層進度條 ```jsx
學習進度
{/* 詞卡進度 */}
詞卡: {completedCards}/{totalCards}
{/* 測驗進度 */}
{/* 詞卡進度條 */}
詞卡
{completedCards}/{totalCards}
{/* 測驗進度條 */}
測驗
setShowTaskListModal(true)} title="點擊查看詳細進度" >
{completedTests}/{totalTests}
``` --- ## 🎨 通用Modal設計 ### 圖片放大Modal ```jsx
setModalImage(null)}>
放大圖片
``` ### 任務清單Modal ```jsx
{/* Header */}

📚 學習任務清單

{/* Content */}
{/* 進度統計 */}
測驗進度: {completedTests} / {totalTests} ({progressPercentage}%)
✅ 已完成: {completedCount} ⏳ 進行中: {currentCount} ⚪ 待完成: {pendingCount}
{/* 測驗清單 */}
{testItems.map((item) => (
{item.isCompleted ? '✅' : item.isCurrent ? '⏳' : '⚪'}
{item.order}. {item.word} - {item.testName}
{item.isCompleted ? '已完成' : item.isCurrent ? '進行中' : '待完成'}
))}
{/* Footer */}
``` --- ## 🎮 導航控制設計 ### 智能導航按鈕 ```jsx
{/* 上一張按鈕 */} {/* 動態下一張按鈕 */}
``` ### 跳過功能按鈕 ```jsx {/* 跳過按鈕(答題前狀態) */} {!showResult && (
)} {/* 繼續按鈕(答題後狀態) */} {showResult && (
)} ``` --- ## 🎨 設計特色總結 ### 1. **一致性設計** - 所有測驗類型都採用相同的容器結構 (`bg-white rounded-xl shadow-lg p-8`) - 統一的配色方案和視覺層次 - 標準化的按鈕樣式和hover效果 ### 2. **響應式布局** - 使用 Grid 和 Flexbox 布局 - 適配不同螢幕尺寸 (`md:grid-cols-2 lg:grid-cols-3`) - 移動端友好的觸控設計 ### 3. **互動動畫** - 翻卡3D效果 (`transform: rotateY(180deg)`) - Hover狀態轉換 (`transition-all`, `hover:bg-blue-50`) - 按鈕點擊反饋 (`active:bg-gray-300`) ### 4. **無障礙設計** - 鍵盤導航支援 (`onKeyDown` Enter 鍵提交) - 清晰的狀態反饋 (`disabled` 狀態顯示) - 適當的對比度和字體大小 ### 5. **視覺層次** - 合理的間距系統 (`mb-6`, `p-4`, `gap-3`) - 字體大小層次 (`text-4xl`, `text-2xl`, `text-lg`, `text-sm`) - 顏色對比設計 (`text-gray-900`, `text-gray-700`, `text-gray-500`) ### 6. **即時反饋** - 答題後的即時視覺反饋(綠色成功,紅色錯誤) - 動態進度條更新 - 狀態圖標顯示 (`✅`, `❌`, `⏳`, `⚪`) --- ## 📝 實作注意事項 ### 必需依賴組件 1. **AudioPlayer** - 音頻播放功能 2. **VoiceRecorder** - 語音錄製功能 3. **MasteryIndicator** - 熟悉度顯示 4. **ReviewTypeIndicator** - 測驗類型指示器 ### 關鍵狀態管理 - `isFlipped` - 翻卡狀態 - `showResult` - 顯示答題結果 - `selectedAnswer` - 用戶選擇的答案 - `fillAnswer` - 填空題答案 - `arrangedWords` / `shuffledWords` - 重組題狀態 ### 動畫效果實作 - 使用 CSS `transition-all` 實現平滑過渡 - 翻卡動畫需要 `transform-style: preserve-3d` - 進度條動畫使用 `transition-all` 配合動態 `width` 樣式 這份文件保留了原始設計的所有精華和用戶體驗細節,可作為重新實作的完整參考。