Skip to content

Releases: pekoqq/ReadLoops

v2.3.1 — 品牌重设计 + 专注模式光效

Choose a tag to compare

@pekoqq pekoqq released this 14 Sep 15:30

修复

  • 专注模式与计时器脱节:进入专注不再自动开始计时、退出专注也不停止 → 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/动效打磨 + 划词整句翻译

Choose a tag to compare

@pekoqq pekoqq released this 13 Sep 23:26

安装

已发布到 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。