music(player): 切歌不打扰 — 暂停状态切别的不自动开播 + tab 保持
deploy music / build-and-deploy (push) Successful in 2m0s

- loadPiece 进来先 snapshot wasPlaying / stickyTab
- 新 piece 也有同样 tab 就保持(chord/notes/简谱…),否则才回第一个
- 只有切歌前 audio 正在播才 .play();暂停 / 第一次进入 → 只 set src 等用户点 ▶
- 整理 notes / 看和弦谱的场景从此不会被切歌打断
This commit is contained in:
Fam Zheng
2026-05-25 10:39:49 +01:00
parent 915b91d986
commit 1a62ec6658
+10 -2
View File
@@ -740,6 +740,10 @@ async function promptNewPlaylist() {
}
async function loadPiece(id) {
// 切歌前记下当前是否在播 + tab 在哪 —— 整理 notes / 看和弦谱 时不打扰
const wasPlaying = !!(audioEl.value && !audioEl.value.paused && !audioEl.value.ended)
const stickyTab = activeTab.value // 保持用户当前看的 tab(如果新 piece 也有)
selected.value = null
notesDraft.value = ''
// 切歌清 AB Looprate 保留全局)
@@ -757,15 +761,19 @@ async function loadPiece(id) {
selected.value = p
notesDraft.value = p.notes || ''
selectedId.value = p.id
// tab 保持:sticky 在新 piece 也存在就用它,否则用第一个
const t = tabs.value
if (!t.find(x => x.key === activeTab.value)) {
if (t.find(x => x.key === stickyTab)) {
activeTab.value = stickyTab
} else {
activeTab.value = t[0]?.key || 'lyrics'
}
await nextTick()
const first = audioAttachments.value[0]
if (first && audioEl.value) {
audioEl.value.src = attUrl(first.id)
audioEl.value.play().catch(() => {})
// 只有上一首在播才自动续播;暂停状态 / 第一次进入 → 只设源,等用户点 ▶
if (wasPlaying) audioEl.value.play().catch(() => {})
} else if (audioEl.value) {
audioEl.value.removeAttribute('src')
audioEl.value.load()