Skip to content

AMLL 特定情况下无法滚动 #63

Description

@MoYingJi

检查清单

  • 我已检索仓库中所有的 Issues,确保我没有重复提交问题;或有相似 Issue,但我觉得我的情况不包含在那个相似 Issue 之内
  • 我已经找到了可以复现这个问题的方法,并且写在了下面的「具体信息」中
  • 此问题可以在我的设备和当前环境中稳定复现
  • 此问题可以在最新版本 (Latest Release) 中复现
  • 此问题是在我更新到当前版本后出现的

当前系统环境

Arch Linux

当前 Node.js 及 npm 版本

No response

当前版本

651e945

具体信息

无法稳定复现

  1. 确保「歌词渲染引擎」为 AMLL
  2. 任意播放歌曲(不要打开歌词界面)
  3. 暂停歌曲
  4. 打开歌词界面
  5. 鼠标放在歌词组件上,滚动鼠标或触控板,观察到无法滚动(无法滚动出一定距离,就像弹簧一样,只能滚动出附近一两行)
  6. 播放后恢复正常,即使再暂停也正常(关闭歌词界面后,保持暂停状态,再次打开歌曲界面,可以复现)

这不是 AMLL 的问题,而是本项目使用 AMLL 的方式有问题。因为我在 SPlayer 和 AMLL Player 上都从未出现过此问题

我让 copilot 修了一下。情况貌似有所好转。但因为它无法稳定复现,我也不能确保它解决了问题,而且我看不懂这个 AMLL 组件是如何工作的,所以我没直接开 pr

patch
From 71fb495eaa2d87f600f4ab6377b4759a306daf78 Mon Sep 17 00:00:00 2001
From: MoYingJi <moyingjiaw@outlook.com>
Date: Wed, 1 Jul 2026 02:46:57 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20AMLL=20=E6=9A=82?=
 =?UTF-8?q?=E5=81=9C=E6=97=B6=E6=89=93=E5=BC=80=E6=97=A0=E6=B3=95=E6=BB=9A?=
 =?UTF-8?q?=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/player/Lyrics/AMLLLyrics.vue | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/components/player/Lyrics/AMLLLyrics.vue b/src/components/player/Lyrics/AMLLLyrics.vue
index 39c6dca..99f7165 100644
--- a/src/components/player/Lyrics/AMLLLyrics.vue
+++ b/src/components/player/Lyrics/AMLLLyrics.vue
@@ -52,6 +52,7 @@ const settings = useSettingsStore();
 const wrapperRef = ref<HTMLDivElement | null>(null);
 const playerRef = ref<CoreLyricPlayer>();
 const bottomLineEl = ref<HTMLElement>();
+const clockInitialized = ref(false);
 
 // 是否被父组件冻结
 const isFrozen = ref(false);
@@ -134,8 +135,8 @@ onMounted(() => {
   playerRef.value.addEventListener("line-click", handleLineClick);
 
   // 应用初始状态
-  if (props.initialTime > 0) {
-    playerRef.value.setCurrentTime(props.initialTime);
+  if (Number.isFinite(props.initialTime) && props.initialTime >= 0) {
+    playerRef.value.setCurrentTime(props.initialTime, true);
   }
   if (processedLyrics.value.length > 0) {
     playerRef.value.setLyricLines(processedLyrics.value);
@@ -159,6 +160,13 @@ onUnmounted(() => {
 watchEffect(() => {
   const player = playerRef.value;
   if (!player) return;
+
+  // AMLL 在初始 paused 挂载时需先启动一次内部时钟,之后手动滚动才可正常生效
+  if (!clockInitialized.value) {
+    player.resume();
+    clockInitialized.value = true;
+  }
+
   if (!isFrozen.value && !document.hidden) {
     if (props.playing) {
       player.resume();
-- 
2.54.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions