1.5.11 • Published 3 months ago

@tmagic/stage v1.5.11

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 months ago

画布功能介绍

画布是编辑器中最核心的功能,处理组件拖拽和所见即所得的展示。

画布整体功能示意图

魔方编辑器 如上图所示,中间粉色区域及其周边的标尺,是画布区域,就是这个模块代码要处理的内容。

已选组件的组件树

已选组件列表 已选组件列表,组件列表也可以单选、多选、高亮、删除、拖拽组件到容器内

画布支持的功能

  • 渲染runtime
  • 从编辑器增加组件,可以在左侧组件列表中通过单击/拖拽往画布中加入组件
  • 删除组件,在画布中右键单击组件,在弹出菜单中删除;或者在左侧已选组件的组件树中右键删除组件
  • 单选拖拽组件,可以在画布中选中组件,也可以在左侧目录中
  • 多选拖拽组件,通过按住ctrl健选中多个组件
  • 拖拽改变组件大小
  • 旋转组件
  • 高亮组件,在画布中mousemove经过组件的时候,或者在组件树中mousemove经过组件的时候,高亮组件
  • 配置组件,单选选中组件之后,右侧表单区域对组件进行配置,并更新组件的渲染
  • 添加/删除/隐藏/显示参考线,通过在标尺中往画布中拖拽,给画布添加参考线,图中两条竖向和一天横向的红色线条就是参考线
  • 辅助对齐,单选和多选都支持拖拽过程中会辅助对齐其它组件,并在靠近参考线时吸附到参考线
  • 拖拽组件进入容器,支持通过在画布中单选,或者在组件树中单选,将组件拖拽进入容器

核心类介绍

StageCore

  • 负责统一对外接口,编辑器通过StageCore传入runtime、添加/删除组件、缩放画布、更新参考线和标尺等;同时StageCore也会对外抛出事件,比如组件选中、多选、高亮、更新,runtimeReady等。
  • 管理三个核心类:StageRender、StageMask、ActionManager

StageRender

基于iframe加载传入进来的runtimeUrl,并支持增删改查组件。还提供了一个核心API:getElementsFromPoint,该API负责获取指定坐标下所有dom节点。

StageMask

mask是一个盖在画布区域的一个蒙层,主要作用是隔离鼠标事件,避免鼠标事件直接作用于runtime中的组件,从而避免触发组件本身的点击事件(比如链接组件会跳走)。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直接改的
1.5.11

3 months ago

1.5.10

4 months ago

1.5.9

4 months ago

1.5.8

4 months ago

1.5.7

4 months ago

1.5.6

4 months ago

1.5.5

5 months ago

1.5.4

5 months ago

1.5.3

6 months ago

1.5.2

6 months ago

1.5.1

6 months ago

1.5.0

6 months ago

1.5.0-beta.16

7 months ago

1.5.0-beta.15

7 months ago

1.4.19

8 months ago

1.5.0-beta.14

8 months ago

1.5.0-beta.13

9 months ago

1.5.0-beta.12

9 months ago

1.5.0-beta.11

9 months ago

1.5.0-beta.10

9 months ago

1.4.11

12 months ago

1.4.10

12 months ago

1.4.13

12 months ago

1.4.12

12 months ago

1.4.15

11 months ago

1.4.14

11 months ago

1.4.17

10 months ago

1.4.16

11 months ago

1.4.18

9 months ago

1.4.6

1 year ago

1.5.0-beta.0

10 months ago

1.5.0-beta.2

10 months ago

1.5.0-beta.1

10 months ago

1.5.0-beta.8

10 months ago

1.5.0-beta.7

10 months ago

1.5.0-beta.9

9 months ago

1.5.0-beta.4

10 months ago

1.5.0-beta.3

10 months ago

1.5.0-beta.6

10 months ago

1.5.0-beta.5

10 months ago

1.4.9

1 year ago

1.4.8

1 year ago

1.4.7

1 year ago

1.4.5

1 year ago

1.4.4

1 year ago

1.4.3

1 year ago

1.4.2

1 year ago

1.4.1

1 year ago

1.4.0

1 year ago

1.4.0-beta.2

1 year ago

1.4.0-beta.1

1 year ago

1.3.16

1 year ago

1.3.14

1 year ago

1.3.15

1 year ago

1.3.13

1 year ago

1.3.12

1 year ago

1.3.11

1 year ago

1.3.10

1 year ago

1.3.9

1 year ago

1.3.8

2 years ago

1.3.7

2 years ago

1.3.6

2 years ago

1.3.5

2 years ago

1.3.4

2 years ago

1.3.0-alpha.9

2 years ago

1.3.0-alpha.20

2 years ago

1.3.0-alpha.21

2 years ago

1.3.0-alpha.22

2 years ago

1.3.0-alpha.23

2 years ago

1.3.0-alpha.24

2 years ago

1.3.0-beta.1

2 years ago

1.3.0-beta.2

2 years ago

1.3.0-beta.3

2 years ago

1.3.0-beta.4

2 years ago

1.3.0-beta.5

2 years ago

1.3.0-beta.6

2 years ago

1.3.0-beta.7

2 years ago

1.3.0-beta.8

2 years ago

1.3.0-beta.0

2 years ago

1.3.0-alpha.10

2 years ago

1.3.0-alpha.11

2 years ago

1.3.0-alpha.12

2 years ago

1.3.0-alpha.13

2 years ago

1.3.0-alpha.14

2 years ago

1.3.0-alpha.15

2 years ago

1.3.0-alpha.16

2 years ago

1.3.0-alpha.17

2 years ago

1.3.0-alpha.18

2 years ago

1.3.0-alpha.19

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.3.0-alpha.8

2 years ago

1.3.0-alpha.6

2 years ago

1.3.0-alpha.7

2 years ago

1.3.0-alpha.5

2 years ago

1.3.0-alpha.0

2 years ago

1.3.0-alpha.2

2 years ago

1.3.0-alpha.1

2 years ago

1.3.0-alpha.4

2 years ago

1.3.0-alpha.3

2 years ago

1.2.14

2 years ago

1.2.15

2 years ago

1.2.8

2 years ago

1.2.12

2 years ago

1.2.13

2 years ago

1.2.10

2 years ago

1.2.11

2 years ago

1.2.9

2 years ago

1.2.7

2 years ago

1.2.6

2 years ago

1.2.5

2 years ago

1.2.4

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.2.0

3 years ago

1.2.0-beta.27

3 years ago

1.2.0-beta.26

3 years ago

1.2.0-beta.23

3 years ago

1.2.0-beta.22

3 years ago

1.2.0-beta.25

3 years ago

1.2.0-beta.24

3 years ago

1.2.0-beta.21

3 years ago

1.2.0-beta.20

3 years ago

1.2.0-beta.9

3 years ago

1.2.0-beta.8

3 years ago

1.2.0-beta.3

3 years ago

1.2.0-beta.5

3 years ago

1.2.0-beta.4

3 years ago

1.2.0-beta.7

3 years ago

1.2.0-beta.6

3 years ago

1.2.0-beta.16

3 years ago

1.2.0-beta.15

3 years ago

1.2.0-beta.18

3 years ago

1.2.0-beta.17

3 years ago

1.2.0-beta.12

3 years ago

1.2.0-beta.11

3 years ago

1.2.0-beta.14

3 years ago

1.2.0-beta.13

3 years ago

1.2.0-beta.10

3 years ago

1.2.0-beta.19

3 years ago

1.2.0-beta.1

3 years ago

1.2.0-beta.2

3 years ago

1.1.0-beta.13

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.0-beta.11

3 years ago

1.1.0-beta.12

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.1.0-beta.10

3 years ago

1.0.0-rc.9

3 years ago

1.0.0-rc.7

3 years ago

1.0.0-rc.8

3 years ago

1.1.0-beta.9

3 years ago

1.1.0-beta.8

3 years ago

1.1.0-beta.7

3 years ago

1.1.0-beta.2

3 years ago

1.1.0-beta.1

3 years ago

1.1.0-beta.0

3 years ago

1.1.0-beta.6

3 years ago

1.0.0-rc.13

3 years ago

1.1.0-beta.5

3 years ago

1.0.0-rc.12

3 years ago

1.1.0-beta.4

3 years ago

1.0.0-rc.11

3 years ago

1.1.0-beta.3

3 years ago

1.0.0-rc.10

3 years ago

1.0.0-rc.5

3 years ago

1.0.0-rc.6

3 years ago

1.0.0-rc.3

3 years ago

1.0.0-rc.4

3 years ago

1.0.0-rc.1

3 years ago

1.0.0-rc.2

3 years ago

1.0.0-beta.15

3 years ago

1.0.0-beta.16

3 years ago

1.0.0-beta.14

3 years ago

1.0.0-beta.11

3 years ago

1.0.0-beta.12

3 years ago

1.0.0-beta.10

3 years ago

1.0.0-beta.13

3 years ago

1.0.0-beta.8

3 years ago

1.0.0-beta.9

3 years ago

1.0.0-beta.6

3 years ago

1.0.0-beta.7

3 years ago

1.0.0-beta.3

3 years ago

1.0.0-beta.4

3 years ago

1.0.0-beta.5

3 years ago

1.0.0-beta.2

3 years ago

1.0.0-beta.1

3 years ago