feat: enhance ChapterPlayer UI and add smooth scrolling for active segments in ChaptersPanel

This commit is contained in:
2026-03-13 16:25:07 +08:00
parent 3393be4967
commit 00ba2e0d40
2 changed files with 16 additions and 6 deletions

View File

@@ -1447,6 +1447,7 @@ function ChaptersPanel({
const [chapterPlayerChIdx, setChapterPlayerChIdx] = useState<number | null>(null)
const prevSegStatusRef = useRef<Record<number, string>>({})
const initialExpandDoneRef = useRef(false)
const segRefs = useRef<Record<number, HTMLDivElement | null>>({})
useEffect(() => {
if (!scrollToChapterId) return
@@ -1457,6 +1458,17 @@ function ChaptersPanel({
onScrollToChapterDone()
}, [scrollToChapterId, onScrollToChapterDone])
useEffect(() => {
if (sequentialPlayingId === null || !detail) return
const seg = segments.find(s => s.id === sequentialPlayingId)
if (!seg) return
const ch = detail.chapters.find(c => c.chapter_index === seg.chapter_index)
if (ch) setExpandedChapters(prev => { const n = new Set(prev); n.add(ch.id); return n })
setTimeout(() => {
segRefs.current[sequentialPlayingId]?.scrollIntoView({ behavior: 'smooth', block: 'nearest' })
}, 50)
}, [sequentialPlayingId, detail, segments])
useEffect(() => {
const bumps: Record<number, number> = {}
segments.forEach(seg => {
@@ -1712,6 +1724,7 @@ function ChaptersPanel({
return (
<div
key={seg.id}
ref={el => { segRefs.current[seg.id] = el }}
className={`rounded-lg border overflow-hidden ${sequentialPlayingId === seg.id ? 'border-primary/40 bg-primary/5' : 'bg-card'}`}
>
{/* Card header */}