From 70ab3577998365a71e88c110894b99090f78eff7 Mon Sep 17 00:00:00 2001 From: runnableAir <83274041+runnableAir@users.noreply.github.com> Date: Fri, 30 May 2025 19:59:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=9A=8F=E6=9C=BA=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E4=B8=8B=E5=BD=93=E5=89=8D=E6=92=AD=E6=94=BE=E6=AD=8C=E6=9B=B2?= =?UTF-8?q?=E4=BA=8E=E5=88=97=E8=A1=A8=E4=B8=AD=E7=9A=84=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E9=94=99=E8=AF=AF=E5=92=8C=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E7=9A=84=E6=83=85=E5=86=B5=20(#2378)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(Player.js): 随机模式下列表初始化时当前歌曲的下标异常 异常情况:假设歌曲A其在歌单中的位置为10,随机模式下双击该歌曲后,this.current != 10 原因:随机模式下,通过 indexOf 计算 current 时,调用的数组与真实的列表数组不一致 * fix(Player.js): 随机模式切换时未同步当前歌曲下标 * fix: 随机播放顺序与实际列表不一致 使用 filter 不保证返回的数组的元素顺序与传入的id 顺序对应 --- src/utils/Player.js | 4 +++- src/views/next.vue | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/Player.js b/src/utils/Player.js index 19e1ad8..a0073ec 100644 --- a/src/utils/Player.js +++ b/src/utils/Player.js @@ -130,6 +130,8 @@ export default class { if (shuffle) { this._shuffleTheList(); } + // 同步当前歌曲在列表中的下标 + this.current = this.list.indexOf(this.currentTrackID); } get reversed() { return this._reversed; @@ -892,7 +894,7 @@ export default class { if (autoPlayTrackID === 'first') { this._replaceCurrentTrack(this.list[0]); } else { - this.current = trackIDs.indexOf(autoPlayTrackID); + this.current = this.list.indexOf(autoPlayTrackID); this._replaceCurrentTrack(autoPlayTrackID); } } diff --git a/src/views/next.vue b/src/views/next.vue index 3dacf03..0f31462 100644 --- a/src/views/next.vue +++ b/src/views/next.vue @@ -57,7 +57,9 @@ export default { this.player.current + 1, this.player.current + 100 ); - return this.tracks.filter(t => trackIDs.includes(t.id)); + return trackIDs + .map(tid => this.tracks.find(t => t.id === tid)) + .filter(t => t); }, playNextList() { return this.player.playNextList;