这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的、类似于微软 Office 的 Web Office 套件(包括:文档、表格、幻灯片……等等)。

博客园:《从零开始, 开发一个 Web Office 套件》系列博客目录

富文本编辑器 Github repo 地址:https://github.com/zhaokang555/canvas-text-editor

富文本编辑器 在线 Demo:https://zhaokang555.github.io/canvas-text-editor/

2. 富文本编辑器(MVP)

2.24 Feature:删除文字

2.24.1 算法

  1. 监听input元素的compositionstartcompositionend事件。并记录用户状态:是否正在使用输入法
  2. 监听input元素的keydown事件。当事件触发:
    1. 如果此时用户没有正在使用输入法 & 用户按下的是Backspace键:删除光标前的一个字符
    2. 否则,不做任何操作
  3. 当要删除光标前的一个字符时:
    1. 如果光标处于不显示状态,不做任何操作
    2. 如果光标处于所有字符的前面,不做任何操作
    3. 如果光标处于当前段落的开头,将当前段落和上一个段落合并,并将光标挪动到合并处
    4. 否则,删除光标前一个字符,后面字符补位,并将光标挪动到前一个位置

参考文档:

2.24.2 实现

实现算法的同时,我们对代码进行一些重构:

  • 简化逻辑:使用一个状态store.charUnderCursor(光标所处的字符) 替代store.cursorIdxInChars, store.curParaIdx, store.cursorIdxInCurPara这3个状态所起到的作用
  • 减少状态:使用store.getPrevCharInSoftLine(char: Char)替代shar.prev指针所起到的作用
  • 修改分段逻辑:使用new Char('\n', ...)进行分段

调用算法:

实现算法&重构:

2.24.3 效果

删除:

删除with中文输入法:

2.25 Feature:回车换行

2.25.1 算法

监听keydown事件,当用户按下'Enter'键时:

  1. 如果用户正在使用输入法,不做任何操作。程序后续会进入处理中文输入法的逻辑:将输入法中的原始英文字符上屏。
  2. 如果用户没有正在使用输入法:
    1. 如果光标在所有文字末尾,追加新的一个段落。
    2. 如果光标在文字中间(即光标前后都有字符),在光标处将本段落截断,拆分成两个段落。
  3. 将光标移到下一段开头的位置。

2.25.2 实现

直接调用我们上一小节重构好的store.insertChar(char)就可以:

2.25.3 效果

(未完待续)

从零开始,开发一个 Web Office 套件(12):删除文字 & 回车换行的更多相关文章

  1. 从零开始, 开发一个 Web Office 套件 (3): 鼠标事件

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 对应的Github r ...

  2. 从零开始, 开发一个 Web Office 套件 (2): 富文本编辑器

    书接前文: 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Of ...

  3. 从零开始, 开发一个 Web Office 套件(4):新的问题—— z-index

    <从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office ...

  4. 《从零开始, 开发一个 Web Office 套件》系列博客目录

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 对应的Github r ...

  5. 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 富文本编辑器 万里长征 ...

  6. 从零开始,开发一个 Web Office 套件(13):删除、替换已选中文字

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  7. 从零开始,开发一个 Web Office 套件(9):拖动鼠标选中文字 Edge Case

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  8. 从零开始,开发一个 Web Office 套件(14):复制、粘贴、剪切、全选

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  9. 从零开始,开发一个 Web Office 套件(5):Mouse hover over text

    <从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office ...

随机推荐

  1. Dubbo扩展点应用之三异步调用

    Dubbo不只提供了堵塞式的同步调用,同时提供了异步调用的方式.这种方式主要应用于提供者接口响应耗时明显,消费者端可以利用调用接口的时间去做一些其他的接口调用,利用Future模式来异步等待和获取结果 ...

  2. centos7.+系统,mysql主从部署

    两台服务器或者两个虚拟机 主库:master    IP:192.168.85.152 从库:slave      IP:192.168.85.153 关闭主库防火墙或者放行mysql的3306端口, ...

  3. WPF + Winform 解决管理员权限下无法拖放文件的问题

    wpf,winform混合解决管理员权限无法拖放文件的问题 学习自: https://zhuanlan.zhihu.com/p/343369663 https://zhuanlan.zhihu.com ...

  4. jenkins针对不同用户显示不同项目

    网上看了别人写的博客有点头晕 比如:https://www.cnblogs.com/kazihuo/p/9022899.html  典型的权限混乱,te用户可以读re用户的项目,re用户可以读te用户 ...

  5. 攻防世界之Web_PHP2

    题目: 扫描目录发现index.phps,进入查看发现源码. 代码审计:GET传一个id,id通过url解码后为admin,所以传?id=admin 通过url加密两次的值 使用burpsuite编码 ...

  6. ssh远程端口转发&&windows系统提权之信息收集&&网安工具分享(部分)

    一.ssh远程端口转发 背景:当我们在渗透过程中,获取到内网的一台仅有内网IP的服务器后,我们可以通过ssh隧道,将内网某个主机的端口进行远程转发 1.网络拓扑图 假设获取的服务器为web服务器,we ...

  7. owasp中国

    http://www.owasp.org.cn/OWASP-CHINA/owasp-project/owasp53415927969079c198ce9669-owasp_top_10_privacy ...

  8. linux下使用fcrackzip来暴力破解zip压缩包

    我是在kali上安装的,用命令sudo apt-get install fcrackzip 现在做一个例子,首先生成一个带有密码的zip的包 zip -P hujhh test.zip test1.t ...

  9. 巧用 CSS 实现炫彩三角边框动画

    最近有个小伙伴问我,在某个网站看到一个使用 SVG 实现的炫彩三角边框动画,问能否使用 CSS 实现: 很有意思的一个动画效果,立马让我想起了我在 CSS 奇思妙想边框动画 一文中介绍的边框动画,非常 ...

  10. redis部署以及各种数据类型使用命令等详解

    参考:https://www.cnblogs.com/pyyu/p/9843950.html  redis博客地址 编译安装redis 开始部署 [root@mcw01 ~]$ ls anaconda ...