思路图
插件功能目录结构
└── plugins // 画板组件
├── command // 操作命令方法
├── config // 参数配置项
├── editor // 编辑
├── listener // 监听
├── screen // 预览
├── shortCut // 快捷键功能
└── stage // 画布
1、画布结构
画布主要分为两层,一层主控制,一层主渲染。所有的编辑操作都由控制层开始,控制的显示都在控制层上绘制,并修改对应的页面数据,然后交给渲染层执行渲染绘制。而预览只引入使用渲染层。
└── stage // 画布
├── draw // 绘制元素的方法集合
├── config.ts // 绘制页面的配置参数
├── contextmenu.ts // 右击菜单功能
├── control.ts // 控制层
├── cursor.ts // 文本光标
├── index.ts // 画布功能主入口
├── text.ts // 文本输入
├── textarea.ts // 输入框
└── view.ts // 渲染层
2、编辑
编辑通过indexDB进行操作存储,这样来实现操作的撤销与恢复。
└── editor // 编辑
├── index.ts // 功能主入口
├── db.ts // indexDB功能
└── history.ts // 历史记录
3、预览
└── screen // 预览
├── index.ts // 功能主入口
├── view.ts // 预览入口
└── thumbnail.ts // 缩略图入口
实现功能
基础功能
- 历史记录(撤销、重做)
- 右键菜单
幻灯片页面编辑
- 页面列表
- 页面新增
- 页面删除
- 页面复制粘贴
- 页面排序
- 画布缩放、移动
- 页面背景设置
- 导出
- 导入
- 快捷键
幻灯片元素编辑
- 元素添加
- 元素删除
- 元素复制粘贴
- 元素拖拽移动
- 元素旋转
- 元素缩放
- 元素多选(点选)
- 元素多选(框选)
- 元素全选
- 多元素组合
- 多元素批量编辑
- 元素锁定
- 元素吸附对齐
- 元素锁定缩放比例
- 元素层级调整
- 元素对齐到画布
- 元素对齐到其他元素
- 粘贴外部图片
文字
- 研究canvas文本编辑器
- 字体设置
- 字体大小设置
- 字体颜色设置
- 字体粗体设置
- 字体斜体设置
- 字体下划线设置
- 字体删除线设置
- 文本选中
- 光标移动
- 文本输入
- 回车换行
- 文本单个删除
- 删除选中文本
- 复制、剪切、粘贴文本
- 粘贴外来文本(不带格式)
- 粘贴外来文本(带格式)
- 文本设置行高
- 文本左对齐、居中、右对齐
- 填充色
- 透明度
- 边框
- 文字阴影
图片
- 粘贴外来图片
- 裁剪
- 边框
- 阴影
- 填充色
- 透明度
形状
- 填充色
- 边框
- 阴影
- 透明度
- 翻转
- 文本
图表
- 条形图
- 柱状图
- 折线图
- 饼状图
- 漏斗图
- 编辑图表
- 图例显示及位置
- 图表标题
- 填充色
- 透明度
- 柱状图堆叠显示
- 边框
表格
- 插入表格
视频
- 研究canvas播放视频
- 插入视频
- 视频渲染
- 视频播放暂停
- 视频进度点击调整
- 简单的视频全屏播放(直接使用video自带的全屏)
音频
- 插入音频
公式
- 研究公式
- 插入公式
- 编辑公式
- 填充色
- 透明度
- 边框
幻灯片放映
- 预览放映
- 画笔功能
electron版本
- 网页唤醒或下载客户端
- 对应文件格式打开
- 编辑保存
- 另存为
思考待解决问题
- 图片拉伸和适配两种模式
不规则形状如何判断点在形状内(目前选中元素都是以矩形区域判断,当两个形状重叠时,看到是选的A元素,确展示的是选中的B元素)- 形状后面要考虑增加点位控制可调整的功能
翻转后且存在旋转,鼠标拖拽的距离和实际变化的宽高存在误差,待解决(翻转目前改成控制框不随着翻转)- 渲染canvas和控制canvas,原先设想降低渲染操作对性能的损耗,渲染canvas只做渲染工作,操作元素全在控制canvas,但是控制层在渲染层之上,导致被选中操作的元素会在最高层,遮挡其他元素,但是根据层级选中的元素可能是最底层级的,目前优化方案改为,操作绘线,绘制新增元素效果依旧在控制层,其余元素变动转移到渲染层,但是频繁的渲染,加上渲染层元素很多时,会成倍增加性能的消耗
- 导出采用
pptxgenjs第三方库,但是有许多方面不支持,后面考虑借鉴补充实现完善一下(pptxgenjsbug导出音频不成功,还是视频) - 导入功能插件待完善 导入插件analyze-pptx