Repository navigation
Releases: pekoqq/ReadLoops
Releases · pekoqq/ReadLoops
Release list
v2.3.1 — 品牌重设计 + 专注模式光效
修复
- 专注模式与计时器脱节:进入专注不再自动开始计时、退出专注也不停止 →
toggleFocusMode()进入时(有文章且计时未跑)自动startTimer(),退出时pauseTimer();再次进入从当前读数继续。按钮 /F/Esc/ 自动专注 / 切视图退出等所有入口都汇聚到该函数,一处修复全覆盖 - 清理坏的空格分支:第一个 keydown 处理器调用了从未定义的
toggleTimer()(按空格先抛 ReferenceError,靠第二个处理器兜底)→ 删除重复分支,空格统一由后置处理器在「暂停 / 继续」间切换 - 整句翻译偶发「翻译失败」:根因有二——① deepseek-flash 偶发把正文输出到
reasoning_content、content为空;② 网络抖动时同步httpx无任何重试。_chat()现对网络/HTTP/空内容最多重试 2 次(退避 0.6s 递增),空内容(思考泄漏)判定为可恢复错误并重试 - 整句选中长度被硬限制为 60 字符:稍长的英文句子直接不弹翻译面板(表现为「选了没反应」)→ 放宽到 280
/api/words/translate阻塞事件循环:async 路由内直接跑同步 AI 调用 → 改asyncio.to_thread;失败返回 502 + 明确原因而非笼统空串;空文本直接ok:false- 前端失败即死:整句翻译失败只显示静态「翻译失败」→ 面板内给出原因提示与「点击重试」按钮(
requestSentenceTranslate/renderTranslateRetry)
交互变更 — 计时与专注模式严格挂钩
- 新不变量:计时器只在专注模式下运行(
startTimer()加if(!focusMode) return根防线,任何入口都绕不过),非专注状态下计时不再走 - 空格 / 计时按钮语义统一(新增
toggleTimerWithFocus()):非专注时按空格或点计时键 = 进入专注并同步开始计时;已在专注中则只做暂停 / 继续;非阅读页 / 无文章不响应 - 退出专注必停计时并把按钮文案复位为「开始 [空格]」;移除划词
showLookupPanel里绕过专注的直接startTimer(划词自动进专注已会带动计时) - 空状态 / 帮助的快捷键提示改为「空格 开始专注计时 · 暂停继续」「F 切换专注模式」(两处同步)
增强
- 右侧查词抽屉新手引导箭头:
.right-guide-arrow浮动小玻璃圆钮(currentColor + 玻璃 token,四主题适配),入场后持续向右轻推提示;鼠标唤出右侧抽屉或点「查词」后向右淡出消失,并用localStorage(right_guide_seen)记住,之后不再出现;专注模式下隐藏,带 reduced-motion 兜底 - 专注氛围光上移:氛围光层由单元素双渐变重构为
body::before/::after两个可transform平移的光斑(渐变圆心无法插值,只有 transform 能让光源滑动);日常保持左上冷光/右下暖光的对角光且浓度不变,进入专注时两团光用 3s、延迟 0.3s 的缓动平滑上移、在顶部汇聚成顶光,与水纹涟漪(延迟 300ms + 时长 3s)同时开始、同时落定,退出时 0.6s 跟手回位;光层 z-index 修正为 -1 严格压在内容之下 - 专注态质感分层(日常含蓄 / 专注聚焦):进入专注时只保留一整团居中、放大一圈的统一顶光(
::before移到水平正中、scale 1.7、brightness 2.6;另一团对角光::after淡出,避免顶部并排两个冷暖异色「球」);新增.focus-shade聚焦暗角层(中央阅读卡处通透、向四周/底部轻微压暗,把视线收向文字),暗角浓度用新 token--focus-shade按四主题分别标定(深色 .42 / 纯黑 .58 / 纸质 .26 / 明亮 .15,浅主题不发脏);.app抬到 z-index:1 形成「底色 < 背景光(-1) < 暗角(0) < 内容(1)」的清晰层级;顶光增亮与暗角淡入同为 3s 延迟 .3s,与涟漪一起落定,退出 .6s 回位 - 侧边栏 logo 鼠标交互:hover 时循环环 0.85s 顺时针转一圈并轻微放大(复用
--ease-damped,用 animation 避免离开时整圈倒转),按下:active回弹到 0.86;新增prefers-reduced-motion兜底。单色 currentColor 不变,四主题一致
v2.3.0 — UI/动效打磨 + 划词整句翻译
安装
已发布到 PyPI:pip install readloops,安装后执行 readloops serve 启动。
新增
- 划词翻译整句:选中多个单词时调用 AI 翻译整段选中文本(新增
POST /api/words/translate与ai.py::translate_sentence);选中单个单词仍走本地 ECDICT 词典,句子模式下隐藏「加入生词本」 - 侧边栏 logo 链接:点击项目名跳转项目主页
- 空状态快捷键提示:空列表中展示
空格/选中/F键位提示
重构 — 设计 token 体系
- 按钮系统:新增
--btn-*尺寸/圆角/内边距 token;.toolbar-btn成为全站共享基类(.primary/.danger/.icon/.large),合并此前两套不同的删除按钮设计 - 动效系统:新增
--page-*/--enter-*/--ease-*token;新增staggerIn(selector, step, max)作为成组元素错峰入场的统一入口 - 玻璃质感统一:提高表面亮度,新增
body::before氛围光层(随主题切换配色);弹窗、确认框、输入框由实色统一为玻璃
修复
- 页面切换残影(两个根因):① 渲染函数为 async 但未
await;②transition移除类时反向补间与淡入动画冲突 → 统一改用animation - 自动专注模式回归:非阅读页点击消耗一次性触发机会 → 增加视图判断
- 计时栏在非阅读页也显示 → 改为仅阅读视图显示
- 统计热力图入场「炸开」:188 格各自缩放 → 容器整块淡入
- 清理两套互相覆盖的错峰逻辑与
return之后的死代码 - Windows 控制台中文输出崩溃:默认代码页(cp1252 等)下
readloops --help/init/doctor会 UnicodeEncodeError → CLI 入口统一把标准流重配置为 UTF-8(含回归测试)
动效
- 容器只做 opacity、不做位移,位移仅留给内容层
- 页面离开 0.10s / 进入 0.52s;内容入场 0.78s + 14px 位移 + 0.055s 错峰
- 新增
--ease-damped: cubic-bezier(0.34, 1.28, 0.42, 1)带回弹的阻尼缓动 - 主题切换改为 400ms 颜色过渡
说明:本轮为纯表现层改动;唯一新增后端接口为 POST /api/words/translate,无数据库变更。完整变更见 CHANGELOG。