Skip to content

MusicPlayer v2.22.17 (code 58)

Choose a tag to compare

@HelloEarth520 HelloEarth520 released this 15 Sep 16:27
· 4 commits to main since this release

MusicPlayer v2.22.17

  • 版本号:versionName 2.22.17 / versionCode 58
  • 日期:2026-09-16
  • 本版主题:定位滚动改为「全过程可见 + 时长可自定义」(v2.22.16 实测反馈)

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

v2.22.16 的定位按钮能定位,但距离大于 10 行就是瞬间跳转——看不到滚动过程,
既没有向上/向下的方向感,也看不到列表进度条移动,还是不知道跳到哪去了。

要求:

  1. 不管多远都慢慢滑过去,能看清是向上还是向下、进度条跟着走;
  2. 滚动时长可自定义:设置里加滑块 + 数字,1 ~ 15 秒。

实现

① 弃用 CSS scrollTo({behavior:'smooth'})

CSS smooth 的时长不可控(浏览器自定),且长距离会滚到数秒以上、短距离又太快。
改为自定义 rAF 动画逐帧写 scrollTop:

const ease = t => (t < 0.5 ? 2*t*t : 1 - Math.pow(-2*t + 2, 2) / 2);  // easeInOutQuad
playlistEl.scrollTop = start + delta * ease(p);                        // p = 已过时间/总时长
  • 逐帧改 scrollTop 会照常触发 scroll 事件 → 驱动虚拟滚动渲染 → 列表与进度条实时可见地移动;
  • 落位闪烁仍挂在滚动停止回调(120ms)里,时序逻辑不变,另加 duration + 600ms 兜底定时器。

② 时长规则

  • 距离 ≤10 行:固定 0.6 秒(3 秒爬 10 行过于拖沓);
  • 距离 >10 行:采用设置值,范围 1 ~ 15 秒,默认 3 秒。

③ 设置项「定位滚动 (Locate)」

  • 设置面板新增滑块 set-locate-sec-slider(1~15,步进 1)+ 右侧数值 set-locate-sec-val;
  • 存储:appSettings.locateScrollSec,settingsVersion 5 → 6 并附迁移(非法值回退 3);
  • web-demo 同步持久化到 mp_appearance.locateScrollSec。

④ 可打断

pointerdown / wheel / touchstart 任一发生即 cancelAnimationFrame 取消动画,
用户中途触摸或滚轮可立刻接管滚动,不会跟用户抢。

同步范围

  • www/:index.html(设置组 + 版本号 v2.22.17)、player.js(rAF 动画 / 时长规则 / 设置绑定 / 打断 / v6 迁移)
  • web-demo/:index.html(设置组 + 版本号)、demo.js(rAF 动画 + 滑块 + 持久化)
  • _site_work/site/web-demo/:已 cp + cmp -s 逐字节校验一致

构建与装机

  • cap copy → assembleDebug BUILD SUCCESSFUL(15s,JDK 21)。
  • 装机:Android 平板 pm install -r Success(保留数据,已核验 versionCode=58 / versionName=2.22.17)。
  • 回滚基线:APK/app-v2.22.16-code57.apk(亦在 <归档>/_apk_backup/)。
  • 新增归档工具:_release/archive_release.py(python archive_release.py 2.22.17 58 一条命令出 source/APK/两个 zip)。

待实测

  1. 距离远(如 1387 首跳到第 1000 首)时,是否能看到持续几秒的滚动过程与进度条移动。
  2. 设置里把时长拉到 1 秒 / 15 秒,滚动快慢是否随之改变。
  3. 距离 ≤10 行时是否快速到位(0.6 秒),不拖沓。
  4. 滚动途中用手指一碰,是否立即停下并交由手动控制。
  5. 落位闪烁是否仍然明显(v2.22.16 行为不变)。

构建备忘

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