同步讲解详情播放器时间进度
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
lyf
2026-07-10 11:03:30 +08:00
parent 2a21108157
commit 52f5217252

View File

@@ -225,9 +225,32 @@ const isDetailAudioDockVisible = computed(() => (
exhibit.value.audio.status === 'playable'
))
const audioDockTitle = computed(() => exhibit.value.title || '讲解内容')
const formatDetailAudioTime = (seconds?: number) => {
const normalizedSeconds = Number.isFinite(seconds || 0)
? Math.max(0, Math.floor(seconds || 0))
: 0
const minutes = Math.floor(normalizedSeconds / 60)
const remainSeconds = normalizedSeconds % 60
return `${minutes}:${remainSeconds.toString().padStart(2, '0')}`
}
const detailAudioDurationSeconds = computed(() => {
if (!isCurrentDetailAudioTarget.value) return exhibit.value.audio.duration || 0
return globalAudioPlayer.duration.value
|| globalAudioPlayer.currentAudio.value?.duration
|| exhibit.value.audio.duration
|| 0
})
const detailAudioCurrentSeconds = computed(() => (
isCurrentDetailAudioTarget.value ? globalAudioPlayer.currentTime.value : 0
))
const detailAudioTimeLabel = computed(() => (
`${formatDetailAudioTime(detailAudioCurrentSeconds.value)} / ${formatDetailAudioTime(detailAudioDurationSeconds.value)}`
))
const audioDockSubtitle = computed(() => [
selectedAudioLanguage.value === 'en-US' ? 'English' : '中文',
exhibit.value.audio.durationLabel
detailAudioTimeLabel.value
].filter(Boolean).join(' · ') || '讲解')
const detailAudioPlaying = computed(() => (
isCurrentDetailAudio.value
@@ -236,10 +259,10 @@ const detailAudioPlaying = computed(() => (
const detailAudioProgressPercent = computed(() => {
if (!isCurrentDetailAudioTarget.value) return 0
const total = globalAudioPlayer.duration.value || globalAudioPlayer.currentAudio.value?.duration || 0
const total = detailAudioDurationSeconds.value
if (!total) return 0
return Math.max(0, Math.min(100, (globalAudioPlayer.currentTime.value / total) * 100))
return Math.max(0, Math.min(100, (detailAudioCurrentSeconds.value / total) * 100))
})
// 讲解详情页只定位到所属展厅,不再追踪具体展品点位。
const resolveHallGuidePoi = async () => {