Repository navigation
MusicPlayer v2.22.17 (code 58)
MusicPlayer v2.22.17
- 版本号:versionName 2.22.17 / versionCode 58
- 日期:2026-09-16
- 本版主题:定位滚动改为「全过程可见 + 时长可自定义」(v2.22.16 实测反馈)
需求背景(v2.22.16 实测反馈)
v2.22.16 的定位按钮能定位,但距离大于 10 行就是瞬间跳转——看不到滚动过程,
既没有向上/向下的方向感,也看不到列表进度条移动,还是不知道跳到哪去了。
要求:
- 不管多远都慢慢滑过去,能看清是向上还是向下、进度条跟着走;
- 滚动时长可自定义:设置里加滑块 + 数字,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 →
assembleDebugBUILD SUCCESSFUL(15s,JDK 21)。 - 装机:Android 平板
pm install -rSuccess(保留数据,已核验 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)。
待实测
- 距离远(如 1387 首跳到第 1000 首)时,是否能看到持续几秒的滚动过程与进度条移动。
- 设置里把时长拉到 1 秒 / 15 秒,滚动快慢是否随之改变。
- 距离 ≤10 行时是否快速到位(0.6 秒),不拖沓。
- 滚动途中用手指一碰,是否立即停下并交由手动控制。
- 落位闪烁是否仍然明显(v2.22.16 行为不变)。
构建备忘
同 v2.22.13(cap copy → JAVA_HOME=<JDK 21> → assembleDebug
→ adb push /data/local/tmp + pm install -r)。