music(player): 切歌不打扰 — 暂停状态切别的不自动开播 + tab 保持
deploy music / build-and-deploy (push) Successful in 2m0s
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:
@@ -740,6 +740,10 @@ async function promptNewPlaylist() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function loadPiece(id) {
|
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
|
selected.value = null
|
||||||
notesDraft.value = ''
|
notesDraft.value = ''
|
||||||
// 切歌清 AB Loop(rate 保留全局)
|
// 切歌清 AB Loop(rate 保留全局)
|
||||||
@@ -757,15 +761,19 @@ async function loadPiece(id) {
|
|||||||
selected.value = p
|
selected.value = p
|
||||||
notesDraft.value = p.notes || ''
|
notesDraft.value = p.notes || ''
|
||||||
selectedId.value = p.id
|
selectedId.value = p.id
|
||||||
|
// tab 保持:sticky 在新 piece 也存在就用它,否则用第一个
|
||||||
const t = tabs.value
|
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'
|
activeTab.value = t[0]?.key || 'lyrics'
|
||||||
}
|
}
|
||||||
await nextTick()
|
await nextTick()
|
||||||
const first = audioAttachments.value[0]
|
const first = audioAttachments.value[0]
|
||||||
if (first && audioEl.value) {
|
if (first && audioEl.value) {
|
||||||
audioEl.value.src = attUrl(first.id)
|
audioEl.value.src = attUrl(first.id)
|
||||||
audioEl.value.play().catch(() => {})
|
// 只有上一首在播才自动续播;暂停状态 / 第一次进入 → 只设源,等用户点 ▶
|
||||||
|
if (wasPlaying) audioEl.value.play().catch(() => {})
|
||||||
} else if (audioEl.value) {
|
} else if (audioEl.value) {
|
||||||
audioEl.value.removeAttribute('src')
|
audioEl.value.removeAttribute('src')
|
||||||
audioEl.value.load()
|
audioEl.value.load()
|
||||||
|
|||||||
Reference in New Issue
Block a user