@tmagic/stage
v1.7.2
Published
画布是编辑器中最核心的功能,处理组件拖拽和所见即所得的展示。 ## 画布整体功能示意图  如上图所示,中间粉色区域及其周边的标尺,是画布区域,就是这个模块代码要处理的内容。<br/><br/> ## 已选组件的组件树 。mask在滚动画布时,需要保证同步大小。
ActionManager
- 负责监听鼠标和键盘事件,基于这些事件,形成单选、多选、高亮行为。主要监听的是蒙层上的鼠标事件,通过StageRender.getElementsFromPoint计算获得鼠标下方的组件,实现事件监听和实际组件的解构。
- 向上负责跟StageCore双向通信,提供接口供core调用,并向core抛出事件
- 向下管理StageDragResize、StageMultiDragResize、StageHighlight这三个单选、多选、高亮类,让它们协同工作
StageDragResize
负责单选相关逻辑,拖拽、改变大小、旋转等行为是依赖于开源库Moveable实现的,这些行为并不是直接作用于组件本身,而是在蒙层上创建了一个跟组件同等大小的边框div,实际拖拽的是边框div,在拖拽过程中同步更新组件。 这个类的主要工作包括:
- 初始化组件操作边框,初始化moveable参数
- 更新moveable参数,比如增加了参考线、缩放了大小、表单改变了组件,都需要更新
- 接收moveable的回调函数,同步去更新实际组件的渲染
StageMultiDragResize
功能跟StageDragResize类似,只是这个类是负责多选操作的,通过ctrl健选中多个组件,多选状态下不支持通过表单配置组件。
StageHighlight
在鼠标经过画布中的组件、或者鼠标经过组件目录树中的组件时,会触发组件高亮,高亮也是通过moveable实现的,这个类主要负责初始化moveable并管理高亮状态。
MoveableOptionsManager
StageDragResize、StageMultiDragResize的父类,负责管理Moveable的配置
TargetShadow
统一管理拖拽框和高亮框,包括创建、更新、销毁。
DragResizeHelper
- 拖拽/改变大小等操作发生时,moveable会抛出各种状态事件,DragResizeHelper负责响应这些事件,对目标节点target和拖拽节点targetShadow进行修改;
- 其中目标节点是DragResizeHelper直接改的,targetShadow作为直接被操作的拖拽框,是调用moveableHelper改的;
- 有个特殊情况是流式布局下,moveableHelper不支持,targetShadow也是DragResizeHelper直接改的
