这是一个系列博客,最终目的是要做一个基于 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.27 Feature:复制、粘贴文本

2.27.1 基本原理

在Mac上,当用户按下command键时,KeyboardEvent.metaKey为true;在Windows上,当用户按下ctrl键时,KeyboardEvent.ctrlKey为true.

参考资料:

可以使用剪贴板 Clipboard API 异步读写系统剪贴板:

参考资料:

2.27.2 算法

  • 当用户按下command/ctrl + c时,检测是否有选中文字:

    • 如果有选中文字,将选中文字复制到剪切板;
    • 如果没有选中文字,不作任何操作。
  • 当用户按下command/ctrl + v时,如果剪贴板内字符串不是空字符串,将其拆分成多个字符,插入光标处,并匹配光标处文字样式;

  • 当用户按下command/ctrl + x时,检测是否有选中文字:

    • 如果有选中文字:

      • 将选中文字复制到剪切板;
      • 删除选中文字。
    • 如果没有选中文字,不作任何操作。
  • 当用户按下command/ctrl + a时,选中全部文字。

2.27.3 实现

实现的同时,我们顺便修复下之前留下的一个bug:当我们将光标移动到所有文字的末尾或开头时(store.moveCursorToEnd, store.moveCursorToStart),如果编辑器内没有文字,需要将光标挪动到左上角。

调用算法:

实现算法:

2.27.4 效果

复制:

粘贴:

剪切:

全选:

(未完待续)

最新文章

  1. Linux 学会这些基本可以啦
  2. 关于SQL SERVER的N前缀的理解
  3. 在Android Studio 中正确使用adil ”绝对经典“
  4. 向MySql中插入中文时出现乱码
  5. Socket网络编程例子
  6. SpringMVC学习记录
  7. MetaData Lock 杨奇龙 ---MYSQL博客专家
  8. Unity3D获取当前键盘按键
  9. dubbo初体验
  10. Xshell利用登录脚本从服务器登录到另外一个服务器
  11. 为什么Java 两个Integer 中1000==1000为false而100==100为true?
  12. Java基础学习笔记四 Java基础语法
  13. 非常适用的Sourceinsight插件,提高效率【强力推荐】
  14. IOS UIWebView用法
  15. C和C指针小记(十三)-数组
  16. [微信小程序] 微信小程序富文本-wxParse的使用
  17. Ubuntu 16.04 LTS安装sogou输入法详解
  18. MyBatis 工具 pndao - 自动写 SQL
  19. 数据结构 hbb(汉堡包)
  20. stl_multiset.h

热门文章

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 第00章 - 环境准备
  2. Spring Data JPA应用之常规CRUD操作初体验
  3. Web渗透测试入门之SQL注入(上篇)
  4. [题解]UVA10026 Shoemaker's Problem
  5. Glob 语法及解析
  6. 3rd S-curve velocity profile
  7. nginx之版本升级方法一
  8. 像追女神一样学好java~
  9. numpy最后一部分及pandas初识
  10. ibv_get_device_list()函数