记录实现腾讯文档-浮动图表|图片的实现过程

500 阅读1分钟
开篇

表格本身使用konva绘制,浮层我不使用konva.layer来实现了,而是使用dom来实现,是因为考虑到交互复杂性。

🧑‍涉及到的插件
    "echarts": "^5.5.1", 绘制图表
    "moveable": "^0.53.0",可移动!可拖动!可调整大小!可缩放节点的插件
    "rxjs": "^7.8.1" 
效果对比 前面时腾讯文档的,后面是自己实现的。
4c603be8e3b5d277e9812231915ef7af_720.png a5349a472ca0dfaebfd326abe0f587ed.png
实现过程
  1. 首先定义一个ShapeManager管理所有的浮层shape。同时处理shape对象的增删查。
image.png
  1. 定义两个基本shape类。 ImageShape 和 EchartsShape。这两个类主要生成各自挂载的dom节点 和 渲染子节点。
image.png image.png
  1. 将公共的数据和逻辑提取到基类中去。便于后续扩展。这个类主要是生成 moveable对象,用于控制子类的dom,以达到旋转 拖动等功能。
image.png
  1. 接下来需要创建一个container,用于统一处理挂载浮动层所有的 图表| 图片节点的dom。增加 | 删除dom等...
image.png
  1. 一切创建完毕后,我们需要监听表格的数据变化,用于更新 shape 内部依赖的cell数据。我们一开始在实例化shape时需要传入依赖的单元格范围数据 比如 'A5:C6'. 监听单元格数据变化,判断变更的单元格数据与每一个shape的range是否存在相交,存在的话更新 图表 | 图片的数据就行,然后重新渲染。
image.png image.png

结束

当然完整的效果肯定不至于此。还要考虑 滚动跟随 | 移除可视区域隐藏 | 用户交互等等...只要架子搭建好了,剩下的就是缝缝补补了。