Repository navigation
MusicPlayer v2.22.16 (code 57)
MusicPlayer v2.22.16
- 版本号:versionName 2.22.16 / versionCode 57
- 日期:2026-09-15
- 本版主题:目录头新增「定位当前播放」按钮(长列表 / 随机播放场景定位)
需求背景(v2.22.15 实测反馈)
导入 1387 首音乐后:
- 随机播放时播放列表不跟随定位到当前曲目;
- 手动滑动很久才能找到,且快速滑动时看不清当前项的颜色变化(当前项仅有 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 →
assembleDebugBUILD SUCCESSFUL(17s,JDK 21)。 - 装机:Android 平板
pm install -r覆盖安装 Success(保留数据)。 - 回滚基线:
APK/app-v2.22.15-code56.apk(亦在<归档>/_apk_backup/)。 - Android 手机 未连接,本版按钮在手机横屏下的表现待验证。
待实测
- 随机播放中途点定位按钮:当前曲目是否居中且闪烁明显可见。
- 距离极远(>40 行,如 1387 首跳到第 1000+ 首)时是否瞬间跳转而非长时间滚动。
- 连点两次是否每次都重新闪烁(强制重排重挂动画)。
- 未播放任何歌曲时点击,是否提示「当前没有正在播放的歌曲」。
- 回归:目录折叠、+ 添加目录、炫彩分区等 v2.22.13~15 内容不受影响。
构建备忘
同 v2.22.13(cap copy → JAVA_HOME=<JDK 21> → assembleDebug
→ adb push /data/local/tmp + pm install -r)。