从零开始,开发一个|从零开始,开发一个 Web Office 套件(7)(新的问题—— Click 事件的 z-index)
这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的、类似于微软 Office 的 Web Office 套件(包括:文档、表格、幻灯片……等等)。2. 富文本编辑器(MVP) 2.18 Click 事件的 z-index 2.18.1 新的问题:点击空白处
博客园:《从零开始, 开发一个 Web Office 套件》系列博客目录
富文本编辑器 Github repo 地址:https://github.com/zhaokang555/canvas-text-editor
首先,我们先观察一下其他的幻灯片软件:
文章图片
通过上图可以发现,当我们点击编辑器内空白处时,编辑器会执行以下逻辑:
- 找到距离点击位置最近的行
- 在此行内找到距离点击位置最近的字符
- 在此字符的左侧或者右侧插入光标
2.18.2 重构
修改
ClickZone
,在handle canvas click时不直接触发onClick
,而是根据zIndex将onClick
记录到topLayerCallbacks
中:文章图片
然后,在
CanvasTextEditor.render()
中触发回调函数,之后清空topLayerCallbacks
:文章图片
同时,修改
CanvasTextEditorChar.constructor()
的实现,传入zIndex:文章图片
这样,
ClickZone
就支持了z-index.2.19 Feature: 点击编辑器空白处后,在适当位置插入光标 修改
CanvasTextEditor
, 添加blankSpace
属性, 大小和整个编辑器重叠:文章图片
然后,添加
handleClickOnTheBlankSpace
方法,实现文章开头所描述的算法:文章图片
其中,形参
mouseX
和mouseY
代表点击位置,我们需要修改ClickZone
将其传入:文章图片
效果:
文章图片
2.19.1 Fix bug
不过,细心的读者会发现一个问题:当我们点击最左侧区域,试图在第二行第一个字符前插入光标,结果光标跑到了第一行末尾。
这是因为,我们之前将行首的char的prev属性赋值成了上一行行尾的char。要解决这个bug,只需要将赋值相关代码从
Paragraph
中挪到SoftLine
中:文章图片
文章图片
效果:
文章图片
2.19.2 Fix: 光标在不同位置粗细不一
细心观察上图的同学会发现一个样式问题:光标在不同位置时,其粗细肉眼可见地不一致。这是因为根据字符位置,计算出来的光标的位置不是整数。我们只需要将其坐标取整就可以了:
文章图片
效果:
文章图片
【从零开始,开发一个|从零开始,开发一个 Web Office 套件(7)(新的问题—— Click 事件的 z-index)】(未完待续)
推荐阅读
- 开源分布式关系型数据库|平安科技从 Oracle 迁移到 UbiSQL 的实践
- React|web前端高级React - React从入门到进阶之React条件渲染
- React|web前端高级React - React从入门到进阶之元素渲染
- React|web前端高级React - React从入门到进阶之React事件处理
- react.js|react从入门到精通 1
- WEB前端框架|web前端高级React - React从入门到进阶之JSX简介
- React|web前端高级React - React从入门到进阶之初识React
- pytorch|从零开始pytorch手写字母识别
- MySQL主从复制之并行复制说明
- 面试中的MySQL主从复制|手撕MySQL|对线面试官