Skip to content

v1.16.2 — 模糊滑块会从指针底下跳走,落点随机写进 localStorage

Choose a tag to compare

@github-actions github-actions released this 27 Aug 17:40
· 107 commits to main since this release

补丁版。修的是 v1.16.0 自己引入的一条,v1.16.1 没看见。

症状

反复发现 magi-glass-blur 里出现没人选过的值(2、5、7 各一次)。复现出来是这样:

新加载,什么都没存        slider=22   stored=null
拖到 14                  slider=14   stored=14
拖到 12                  slider=12   stored=12
拖到 10                  slider=22 ← 跳了    stored=10
拖到 9                   slider=9    stored=9

拖到 10 的瞬间,滑块自己跳到 22。

成因

三件事叠在一起:

  1. GLASS_DEFAULTS.blur = 10 被当成「没有覆盖」的哨兵值——等于 10 就
    removeProperty,让 CSS 的主题默认值生效。
  2. 但每个主题的 CSS --glass-blur 都不一样:light 20、dark 22、MAGI 蓝 10。
  3. v1.16.0 为了让读数别撒谎(静止时显示 10px 而面板实际在模糊 22px),把计算
    值写回了 slider.value

于是在 dark 下拖到 10,代码立刻把滑块设成 22——旋钮从指针底下跑掉了。真实拖
动时,下一次指针移动是相对跳走后的位置计算的,落点就是随机的。

顺带一处早于此的问题:「重置」写的是 "10" 而不是删除键,所以重置之后键永
远留着,把模糊钉死在滑块默认值上,主题自己的值再也回不来。

修法

哨兵彻底去掉。未设置 = 用主题的 CSS 值;存了就是显式覆盖。没有任何一个滑块位
置是特殊的。

  • glassSetting 未设置时返回 null 而不是硬编码回退值——只有这样才能区分「没设
    过」和「刚好设成了默认值」
  • 「重置」改为删除键
  • 主题切换后刷新读数,否则切完仍显示上一个主题的默认值

修好后:

拖到 10          slider=10   stored=10    卡片模糊=10
重置             slider=22   stored=null  卡片模糊=22
主题切到 light   slider=20   label=20px   卡片模糊=20

回归测试锁住了这个不变量:滑块默认值不得用作哨兵,重置必须删键而不是写值。

pipx upgrade --install magi-research

Browser buttonmagi-browser-extension-v1.2.1.zip below.
Unzip it, open chrome://extensions, turn on Developer Mode, and use Load unpacked on the unzipped folder. It sends the page you are reading to a local MAGI queue and nothing else; nothing enters a library until you approve the batch.