Skip to content

MusicPlayer v2.22.16 (code 57)

Choose a tag to compare

@HelloEarth520 HelloEarth520 released this 15 Sep 16:26
· 5 commits to main since this release

MusicPlayer v2.22.16

  • 版本号:versionName 2.22.16 / versionCode 57
  • 日期:2026-09-15
  • 本版主题:目录头新增「定位当前播放」按钮(长列表 / 随机播放场景定位)

需求背景(v2.22.15 实测反馈)

导入 1387 首音乐后:

  1. 随机播放时播放列表不跟随定位到当前曲目;
  2. 手动滑动很久才能找到,且快速滑动时看不清当前项的颜色变化(当前项仅有 2px 跑马灯细环),导致完全不知道播到哪一首。

实现

① 目录头新增定位按钮

  • 位置:音乐目录 头栏右侧,「展开 ▾」与「+ 添加目录」之间(指定“加号左边”)。
  • 样式:26×26 圆形、青色 #22d3ee,与 .btn-add-dir 同规格;内含靶心 SVG。

② 居中滚动(locateCurrentTrack)

target = idx * itemH - (viewH - itemH) / 2      // 居中
target = clamp(target, 0, playlistLen * itemH - viewH)
  • 距离 >40 行(≈2720px)用 behavior:'auto' 直接跳(千首列表 smooth 会滚好几秒),
    ≤40 行用 smooth;老 WebView 不支持 options 形式时回退 scrollTop = target。

③ 落位后整卡闪烁 1.5s

  • .locate-flash 关键帧:青色底 + 外扩光环脉冲两次后淡出,卡片边框同步高亮。
  • 时序要点:虚拟化列表滚动中会 container.innerHTML='' 重建节点,闪烁类会丢,
    因此挂在 onPlaylistScroll 的**滚动停止回调(120ms)**里,而不是滚动发起时。
  • 兜底:目标位置与当前位置相同(不产生 scroll 事件)时,由 900ms(auto 时 400ms)
    定时器强制触发一次闪烁。

④ 设计取舍:不做「切歌自动跟随」

历史结论(见 renderVisibleItems 注释):自动 scrollIntoView 会在用户手动浏览列表时
把列表强行拉回当前曲目。因此改为用户主动点击触发,不自动定位。

同步范围

  • www/:index.html(按钮 + 版本号)、style.css(按钮样式 + @keyframes locate-flash)、
    player.js(locateCurrentTrack / flashCurrentPlaylistItem + 按钮绑定 + 停稳回调钩子)
  • web-demo/:同样三件套(全量渲染无虚拟滚动,直接 scrollIntoView({block:'center'}) + flash)
  • _site_work/site/web-demo/:已 cp + cmp -s 逐字节校验一致

构建与装机

  • cap copy → assembleDebug BUILD SUCCESSFUL(17s,JDK 21)。
  • 装机:Android 平板 pm install -r 覆盖安装 Success(保留数据)。
  • 回滚基线:APK/app-v2.22.15-code56.apk(亦在 <归档>/_apk_backup/)。
  • Android 手机 未连接,本版按钮在手机横屏下的表现待验证。

待实测

  1. 随机播放中途点定位按钮:当前曲目是否居中且闪烁明显可见。
  2. 距离极远(>40 行,如 1387 首跳到第 1000+ 首)时是否瞬间跳转而非长时间滚动。
  3. 连点两次是否每次都重新闪烁(强制重排重挂动画)。
  4. 未播放任何歌曲时点击,是否提示「当前没有正在播放的歌曲」。
  5. 回归:目录折叠、+ 添加目录、炫彩分区等 v2.22.13~15 内容不受影响。

构建备忘

同 v2.22.13(cap copy → JAVA_HOME=<JDK 21> → assembleDebug
→ adb push /data/local/tmp + pm install -r)。