开篇
表格本身使用konva绘制,浮层我不使用konva.layer来实现了,而是使用dom来实现,是因为考虑到交互复杂性。
🧑涉及到的插件
"echarts": "^5.5.1", 绘制图表
"moveable": "^0.53.0",可移动!可拖动!可调整大小!可缩放节点的插件
"rxjs": "^7.8.1"
效果对比 前面时腾讯文档的,后面是自己实现的。
实现过程
- 首先定义一个ShapeManager管理所有的浮层shape。同时处理shape对象的增删查。
- 定义两个基本shape类。 ImageShape 和 EchartsShape。这两个类主要生成各自挂载的dom节点 和 渲染子节点。
- 将公共的数据和逻辑提取到基类中去。便于后续扩展。这个类主要是生成 moveable对象,用于控制子类的dom,以达到旋转 拖动等功能。
- 接下来需要创建一个container,用于统一处理挂载浮动层所有的 图表| 图片节点的dom。增加 | 删除dom等...
- 一切创建完毕后,我们需要监听表格的数据变化,用于更新 shape 内部依赖的cell数据。我们一开始在实例化shape时需要传入依赖的单元格范围数据 比如 'A5:C6'. 监听单元格数据变化,判断变更的单元格数据与每一个shape的range是否存在相交,存在的话更新 图表 | 图片的数据就行,然后重新渲染。
结束
当然完整的效果肯定不至于此。还要考虑 滚动跟随 | 移除可视区域隐藏 | 用户交互等等...只要架子搭建好了,剩下的就是缝缝补补了。