这是一个系列博客,最终目的是要做一个基于 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.29 Feature:拖动控制点,调整编辑器大小

2.29.1 算法

  1. 监听控制点的拖动事件,将拖动的距离记为(dx, dy)。根据控制点所处方位,平移编辑器或者改变其大小:

    1. 如果拖动的是左上角(TopLeft)的控制点,则:

      1. 将编辑器平移(dx, dy)
      2. 将编辑器宽高增加(-dx, -dy)
    2. 如果拖动的是顶部中央(Top)的控制点,则:
      1. 将编辑器平移(0, dy)
      2. 将编辑器高度增加-dy
    3. 如果拖动的是右上角(TopRight)的控制点,则:
      1. 将编辑器平移(0, dy)
      2. 将编辑器宽高增加(dx, -dy)
    4. 如果拖动的是右侧中央(Right)的控制点,则将编辑器宽度增加dx
    5. 如果拖动的是右下角(BottomRight)的控制点,则将编辑器宽高增加(dx, dy)
    6. 如果拖动的是底部中央(Bottom)的控制点,则将编辑器高度增加dy
    7. 如果拖动的是左下角(BottomLeft)的控制点,则:
      1. 将编辑器平移(dx, 0)
      2. 将编辑器宽高增加(-dx, dy)
    8. 如果拖动的是左侧中央(Left)的控制点,则:
      1. 将编辑器平移(dx, 0)
      2. 将编辑器宽度增加-dx
  2. 如果平移了编辑器,就会进入上一节讲到的平移编辑器的逻辑,这里就不再赘述;
  3. 如果调整了编辑即的宽度,则需要:
    1. 将上边框和下边框横向拉伸,但是高度不变
    2. 将左边框和右边框平移
    3. 将不同位置的控制点平移不同距离
  4. 如果调整了编辑即的高度,则需要:
    1. 将左边框和右边框纵向拉伸,但是宽度不变
    2. 将上边框和下边框平移
    3. 将不同位置的控制点平移不同距离

2.29.2 实现

2.29.3 效果

2.29.4 Bug: 平移或调整大小后,点击编辑器空白处,光标不能正确定位

Bug表现:

原因分析:这是因为编辑器平移或调整大小后,editor.blankSpace没有及时更新。

修复:

2.29.5 最终效果

(未完待续)

从零开始,开发一个 Web Office 套件(16):拖动控制点,调整编辑器大小的更多相关文章

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

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

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

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

  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 套件(9):拖动鼠标选中文字 Edge Case

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

  7. 从零开始,开发一个 Web Office 套件(15):拖动边框,平移编辑器

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

  8. 从零开始,开发一个 Web Office 套件(6):光标 & Click 事件

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

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

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

随机推荐

  1. Kafka 都有哪些特点?

    高吞吐量.低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作. ...

  2. Java 中 notify 和 notifyAll 有什么区别?

    notify() 方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有 用武之地.而 notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程 能继续运行.

  3. Zookeeper 的典型应用场景 ?

    Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...

  4. Spring 支持的 ORM?

    Spring 支持以下 ORM:HibernateiBatisJPA (Java Persistence API)TopLinkJDO (Java Data Objects)OJB

  5. SpringCloud个人笔记-04-Stream初体验

    sb_cloud_stream Spring Cloud Stream 是一个构建消息驱动微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream ...

  6. 联想电脑“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态” 解决方法

    当在虚拟机上安装Ubuntu系统时,出现 "此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态" 弹窗此时需要进入BIOS修改相关的设置,此处以联想ideap ...

  7. C语言常用字符串函数

    string.h头文件中常用的函数 C 库函数 - strcat() char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所 ...

  8. MATLAB quadprog函数求解二次规划问题

                     [例]求如下二次规划问题. [分析]首先应该把目标函数表示成如下矩阵形式: 这里要细说一下如何写成矩阵形式. 首先,向量x是很容易写出的,因为f(x)包含两个变量x1 ...

  9. (4)_结果与讨论Result and Discussion【论文写作】

  10. mobileSite开发Tips

    1,根节点(html,body)overflow属性会遮盖fixed定位元素 2,fixed元素点击时会弹出底部的菜单,应该是浏览器特性(safari) 3,fixed元素使用后,在body里面使用p ...