diff --git a/src/pages/ProcessPurposePracticePage.tsx b/src/pages/ProcessPurposePracticePage.tsx index bc70cb8..399b0e6 100644 --- a/src/pages/ProcessPurposePracticePage.tsx +++ b/src/pages/ProcessPurposePracticePage.tsx @@ -108,6 +108,12 @@ export default function ProcessPurposePracticePage() { .map((id, index) => ({ item: itemMap.get(id), index })) .filter((card): card is { item: NonNullable; index: number } => Boolean(card.item)) const nextPreviewItem = itemMap.get(progress.order[progress.currentIndex + 1]) + const deckCards = [ + ...visibleQuestionCards.map((card) => ({ ...card, isPreview: false })), + ...(nextPreviewItem + ? [{ item: nextPreviewItem, index: progress.currentIndex + 1, isPreview: true }] + : []), + ] const focusFirstEmptyInput = useCallback(() => { setTimeout(() => { @@ -229,7 +235,7 @@ export default function ProcessPurposePracticePage() { const deckTop = deck.getBoundingClientRect().top const cardTop = currentCard.getBoundingClientRect().top - const targetTop = Math.max(deck.scrollTop + cardTop - deckTop - 8, 0) + const targetTop = Math.max(deck.scrollTop + cardTop - deckTop - 12, 0) deck.scrollTo({ top: targetTop, behavior: 'smooth' }) }) }, [progress.currentIndex]) @@ -476,7 +482,7 @@ export default function ProcessPurposePracticePage() { className="min-h-0 flex-1 space-y-3 overflow-y-auto overscroll-contain pr-1 scroll-smooth" > - {visibleQuestionCards.map(({ item, index }) => { + {deckCards.map(({ item, index, isPreview }) => { const isCurrent = index === progress.currentIndex const isAnsweredHistory = index < progress.currentIndex @@ -485,7 +491,7 @@ export default function ProcessPurposePracticePage() { key={item.id} initial={{ opacity: 0, y: 24, scale: 0.98 }} animate={{ - opacity: isCurrent ? 1 : 0.62, + opacity: isCurrent ? 1 : isPreview ? 0.52 : 0.62, y: 0, scale: isCurrent ? 1 : 0.975, }} @@ -497,7 +503,9 @@ export default function ProcessPurposePracticePage() { ? 'border-green-300 shadow-lg shadow-green-100/70 ring-2 ring-green-100 dark:border-green-700 dark:shadow-none dark:ring-green-900/40' : isCurrent ? 'border-blue-200 shadow-xl shadow-blue-100/80 ring-2 ring-blue-100 dark:border-blue-800 dark:shadow-none dark:ring-blue-900/30' - : 'border-gray-100 shadow-sm dark:border-gray-800' + : isPreview + ? 'pointer-events-none border-dashed border-gray-200 bg-white/60 shadow-sm blur-[0.4px] dark:border-gray-700 dark:bg-gray-800/50' + : 'border-gray-100 shadow-sm dark:border-gray-800' }`} >
@@ -538,7 +546,7 @@ export default function ProcessPurposePracticePage() {

{item.purpose} @@ -549,22 +557,6 @@ export default function ProcessPurposePracticePage() {

- {!isFinished && nextPreviewItem && ( - -
- 第 {progress.currentIndex + 2} / {totalCount} 题 -
-

- {nextPreviewItem.purpose} -

-
- )} {isFinished && (