全文译文划选选错范围,并弹出参考文献卡片¶
状态:已修复。未开译文时的划选不回归。
现象与原因¶
打开全文翻译后拖选译文,范围经常落到没有划中的文字上。指针经过参考文献时会弹出参考文献卡片,卡片盖住指针,选区被打断。
未开译文时没有这个问题。英文划选由 EmbedPDF 在 pointerdown 到选区菜单出现之前把 isSelecting 设为真,链接预览在这段时间里不打开(#430)。译文划选是覆盖层上的 DOM 选区,EmbedPDF 不会进入 isSelecting。WebView 在延长选区时,pointerenter.buttons 又经常是 0,所以「主键按住就不预览」这条判断失效。
译文里的引用标记是带地址的链接,默认可拖拽。从引用上起笔或拖过引用时,浏览器会把文字选区换成链接拖拽,范围跟着偏掉。
修复¶
- 译文上的主键按下同步标记「正在划选」。这个标记盖住按下到松开,并一直保持到这次译文选区定位结束、选区菜单画出来。预览在标记为真时直接关掉,不再依赖
event.buttons。 - 英文命中区和重排预览里的引用使用同一判断。未开译文时标记为假,原有 hover 和
isSelecting行为不变。 - 引用标记仍是链接,但
draggable={false},划选按正文文字延伸,不会被链接拖拽换成另一段范围。已经划出文字时不导航。
验证¶
test/link-preview-drag.test.ts:主键按住时不预览;译文拖选开始时清掉已打开的卡片;松开后在选区菜单接手之前继续压制。渲染出的译文引用是不可拖拽的链接,划选过程中pointerenter.buttons === 0也不打开预览,松开后悬停恢复。