fix: 编辑区缩放时链接提示框错位 - #265
Closed
runningwaterpro wants to merge 2 commits into
Closed
runningwaterpro wants to merge 2 commits into
runningwaterpro wants to merge 2 commits into
Conversation
底部状态栏新增 [−] [100%] [+],也可以用快捷键和触控板调整当前标签的编辑内容 显示比例,范围 50%~300%。 怎么用 - Ctrl/Cmd + Shift + > 放大 - Ctrl/Cmd + Shift + < 缩小 - Ctrl/Cmd + Shift + D 还原到 100% - Ctrl/Cmd + 滚轮 按滚动量连续缩放 - 点状态栏的百分比 还原到 100% - 滚轮(不按 Ctrl) 保持原有滚动 三个快捷键可在「设置 → 快捷键 → 编辑器」中修改,改完立即生效。 解决的实际问题 - 放大后阅读位置不再跳走。原先按文档百分比还原滚动位置,倍率越大偏差越大, 300% 时能差出七千多像素(约十二屏),表现为选中的文字往上跑、最终移出视口。 改为按选区距视口顶部的像素位置锚定,同一组场景下偏差为 0。 - 连续缩放不再累积偏移。滚轮和连按会连续触发缩放,原先每轮的补偿还挂在 动画帧上,下一轮内容已缩放而滚动未跟上,捕获到的锚点是错的。实测连续 二十档缩到 300%,偏差从 12320px 降到 0。 - Ctrl+滚轮按累积滚动量线性响应。此前用时间窗口判断手势边界,按住 Ctrl 连续滚动会出现停顿感,改为累积量后与 Chrome / VS Code 行为一致。 - 100% 时百分比按钮保持正常外观。「不需要」不等于「不能」,此前用 disabled 表达导致灰显。 - 导出的 HTML / Word / PDF 不含缩放信息,排版与 100% 时一致。 行为边界 - 只作用于编辑区内容层。标题栏、侧边栏、标签栏、状态栏保持原尺寸。 - 代码块的复制按钮和语言/模式选择器在任何倍率下都是原尺寸。 - 每个已打开的标签独立保存倍率,新标签为 100%,关闭标签或重启后重置。 - 不改变 Markdown、文件路径、修改状态、撤销历史和剪贴板内容。 - 源码模式与富文本模式共用同一个标签倍率,状态栏显示同一个百分比。 - 只读文档可以缩放,且不会被改成可编辑。 - 达到 50% 或 300% 时对应按钮禁用。 快捷键选键 - 与已有的两组绑定错开:Ctrl+0 属于「设为段落」,Ctrl+Shift+- 属于 「分割线」,均未改动。 - > 和 < 对应键盘上的 . 和 , 键,是 Word / Excel / Google Docs 的标准 缩放键位。 - 「还原」未用 Ctrl+Shift+0:实测该组合在本应用的快捷键录制中录不进, 按下 Ctrl、Shift 之后收不到主键事件。未采用。 - 三个键位在现有 25 条默认快捷键与菜单 accelerator 中均未被占用。 实现说明 - 缩放快捷键不注册到 ProseMirror keymap,由渲染进程的全局监听处理。keymap 挂在编辑器 DOM 上、仅在编辑区获得焦点时响应,而缩放只改变视图呈现、不修改 文档,窗口有焦点就应当可用。这三条在 action-commands 中没有对应的 command, keymap 构建时会被自动跳过,core 层无需改动。 - 复用既有的快捷键存储、冲突检测、录制界面和显示格式,没有新增配置项。 顺带修复 快捷键录制此前对每一个 keydown 都调用 preventDefault,在 Windows 上会连带 阻止主键事件产生,导致某些组合无法录入。改为只在真正决定结果(录成、清除、 取消)时阻止默认。此问题影响设置页全部条目,与缩放无关,但位于同一条链路。 主键比对补上大小写与 Shift 变体归一:配置存小写 d 而按 Shift+d 时 event.key 是大写 D;配置存 0 而按 Ctrl+Shift+0 时 event.key 是右括号。 验证 - pnpm test:44 个测试通过 - pnpm build:通过 - Electron 37 实测 50%/100%/150%/200%/300% 五档:正文按倍率缩放、外壳与辅助 工具尺寸恒定、滚动位置恢复偏差 0px - 人工验证:按钮、快捷键、滚轮、阅读位置、源码模式、多标签隔离、复制撤销 保存、只读文档、PDF 导出
编辑区支持缩放后,链接提示框按内容一起缩放,位置计算也随之放大,导致它偏离 实际链接。Electron 实测 150% 时纵向偏差 79px,300% 时超过 300px。 改为把提示框挂到 body 上并用视口坐标定位。缩放只作用于编辑区内容层,不再影响 提示框的位置和尺寸。顺带解决了提示框被滚动容器裁掉的问题。 右边缘钳制改为惰性求值:只有链接贴近右边缘时才读取一次宽度,避免每次 hover 都强制同步布局。 Electron 实测五档倍率下定位偏差为 0px,右边缘链接自动留 8px 边距。 本 PR 依赖 #(编辑区缩放)。
runningwaterpro
added a commit
to runningwaterpro/milkup
that referenced
this pull request
Sep 26, 2026
## 怎么用 在本仓库工作时,撰写 PR 描述和提交信息前先读 `AGENTS.md`。它规定了必备结构、每节的要求、需要评审确认的部分怎么写、PR 拆分原则和语言风格。 ## 解决的实际问题 每次提 PR 都要重新构思描述结构,容易漏掉「行为边界」和「需要评审确认」这两节 —— 而它们恰恰是 reviewer 判断能否合并的关键信息。改动影响到他人的快捷键或既有行为时,如果混在普通描述里,很容易被漏看。 规范还固定了一条容易踩的坑:remote 命名反了。`origin` 指向的是上游 `Auto-Plugin/milkup`,`fork` 才是自己的仓库。推代码要用 `git push fork`。 ## 行为边界 - 本文件只适用于 `runningwaterpro/milkup` - 不推送到上游 `Auto-Plugin/milkup` - 不影响构建、测试和运行逻辑,纯文档 ## 验证 - 已在本次 Auto-Plugin#264 和 Auto-Plugin#265 的描述撰写中试用 - 规则本身从这两个 PR 的实际写法反推得出
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
编辑区支持缩放后,链接提示框按内容一起缩放,位置计算也随之放大,导致它偏离实际链接。
现象
原因
提示框原本挂在
.milkup-container内、用position: absolute相对容器定位。缩放作用在容器的父层上,于是两件事同时出错:提示框自身被放大,位置计算也随之放大。改动
document.body上,改用position: fixed+ 视口坐标定位。缩放只作用于编辑区内容层,不再影响提示框。验证
Electron 实测五档倍率(50% / 100% / 150% / 200% / 300%)定位偏差均为 0px,右边缘链接自动留 8px 边距。
说明
本 PR 依赖 #264(编辑区缩放),建议在其之后合入。
Related: runningwaterpro#13 #16