jmgraph 3.2.26 → 3.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +188 -0
- package/dist/jmgraph.core.min.js +1 -1
- package/dist/jmgraph.core.min.js.map +1 -1
- package/dist/jmgraph.js +2713 -425
- package/dist/jmgraph.min.js +1 -1
- package/index.d.ts +142 -1
- package/package.json +1 -1
- package/src/core/jmControl.js +827 -127
- package/src/core/jmEvents.js +154 -0
- package/src/core/jmFilter.js +38 -1
- package/src/core/jmGradient.js +59 -8
- package/src/core/jmGraph.js +51 -7
- package/src/core/jmLayer.js +34 -2
- package/src/core/jmList.js +167 -0
- package/src/core/jmObject.js +128 -8
- package/src/core/jmPath.js +43 -5
- package/src/core/jmProperty.js +181 -2
- package/src/core/jmShadow.js +36 -7
- package/src/core/jmUtils.js +187 -14
- package/src/lib/webgl/base.js +211 -83
- package/src/lib/webgl/core/buffer.js +43 -12
- package/src/lib/webgl/core/mapSize.js +16 -7
- package/src/lib/webgl/core/mapType.js +41 -22
- package/src/lib/webgl/core/program.js +94 -54
- package/src/lib/webgl/core/shader.js +20 -8
- package/src/lib/webgl/core/texture.js +55 -32
- package/src/lib/webgl/gradient.js +49 -17
- package/src/lib/webgl/index.js +173 -24
- package/src/lib/webgl/path.js +61 -12
- package/src/shapes/jmArc.js +48 -2
- package/src/shapes/jmArrow.js +35 -2
- package/src/shapes/jmArrowLine.js +33 -2
- package/src/shapes/jmBezier.js +50 -4
- package/src/shapes/jmCircle.js +35 -2
- package/src/shapes/jmEllipse.js +29 -3
- package/src/shapes/jmHArc.js +39 -2
- package/src/shapes/jmImage.js +49 -3
- package/src/shapes/jmLabel.js +41 -2
- package/src/shapes/jmLine.js +42 -2
- package/src/shapes/jmPolygon.js +42 -3
- package/src/shapes/jmPrismatic.js +34 -2
- package/src/shapes/jmRect.js +45 -3
- package/src/shapes/jmResize.js +42 -4
- package/src/shapes/jmStar.js +38 -4
package/src/core/jmEvents.js
CHANGED
|
@@ -1,14 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview jmEvents 事件处理系统
|
|
3
|
+
*
|
|
4
|
+
* jmEvents 是 jmGraph 库的事件处理模块,负责管理所有用户交互事件。
|
|
5
|
+
* 包括鼠标事件、触摸事件和键盘事件的绑定、分发和销毁。
|
|
6
|
+
*
|
|
7
|
+
* 主要功能:
|
|
8
|
+
* - 鼠标事件:mousedown, mousemove, mouseup, click, dblclick 等
|
|
9
|
+
* - 触摸事件:touchstart, touchmove, touchend, touchcancel, tap
|
|
10
|
+
* - 键盘事件:keydown, keyup, keypress
|
|
11
|
+
* - 事件冒泡和委托机制
|
|
12
|
+
*
|
|
13
|
+
* @module jmEvents
|
|
14
|
+
* @author jmGraph Team
|
|
15
|
+
* @license MIT
|
|
16
|
+
*/
|
|
17
|
+
|
|
1
18
|
import {jmUtils} from "./jmUtils.js";
|
|
2
19
|
|
|
20
|
+
/**
|
|
21
|
+
* jmEvents 事件处理类
|
|
22
|
+
*
|
|
23
|
+
* 统一管理画布上的所有交互事件,包括鼠标、触摸和键盘事件。
|
|
24
|
+
* 支持事件冒泡机制,可以将事件传递给子控件处理。
|
|
25
|
+
*
|
|
26
|
+
* @class jmEvents
|
|
27
|
+
*
|
|
28
|
+
* @param {jmGraph} container jmGraph 实例
|
|
29
|
+
* @param {HTMLElement} target 事件目标元素(通常是 canvas 元素)
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* // 通常由 jmGraph 内部创建,不需要手动实例化
|
|
33
|
+
* const events = new jmEvents(graph, canvasElement);
|
|
34
|
+
*/
|
|
3
35
|
export default class jmEvents {
|
|
4
36
|
|
|
37
|
+
/**
|
|
38
|
+
* 构造函数
|
|
39
|
+
*
|
|
40
|
+
* @param {jmGraph} container jmGraph 实例
|
|
41
|
+
* @param {HTMLElement} target 事件目标元素
|
|
42
|
+
*/
|
|
5
43
|
constructor(container, target) {
|
|
44
|
+
/**
|
|
45
|
+
* jmGraph 实例
|
|
46
|
+
* @type {jmGraph}
|
|
47
|
+
*/
|
|
6
48
|
this.container = container;
|
|
49
|
+
/**
|
|
50
|
+
* 事件目标元素
|
|
51
|
+
* @type {HTMLElement}
|
|
52
|
+
*/
|
|
7
53
|
this.target = target || container;
|
|
54
|
+
/**
|
|
55
|
+
* 鼠标事件处理器
|
|
56
|
+
* @type {jmMouseEvent}
|
|
57
|
+
*/
|
|
8
58
|
this.mouseHandler = new jmMouseEvent(this, container, target);
|
|
59
|
+
/**
|
|
60
|
+
* 键盘事件处理器
|
|
61
|
+
* @type {jmKeyEvent}
|
|
62
|
+
*/
|
|
9
63
|
this.keyHandler = new jmKeyEvent(this, container, target);
|
|
10
64
|
}
|
|
11
65
|
|
|
66
|
+
/**
|
|
67
|
+
* 触摸开始事件处理
|
|
68
|
+
*
|
|
69
|
+
* @method touchStart
|
|
70
|
+
* @param {TouchEvent} evt 触摸事件对象
|
|
71
|
+
* @return {boolean} 如果事件目标为画布本身则返回 false
|
|
72
|
+
*/
|
|
12
73
|
touchStart(evt) {
|
|
13
74
|
evt = evt || window.event;
|
|
14
75
|
evt.eventName = 'touchstart';
|
|
@@ -19,6 +80,13 @@ export default class jmEvents {
|
|
|
19
80
|
}
|
|
20
81
|
};
|
|
21
82
|
|
|
83
|
+
/**
|
|
84
|
+
* 触摸移动事件处理
|
|
85
|
+
*
|
|
86
|
+
* @method touchMove
|
|
87
|
+
* @param {TouchEvent} evt 触摸事件对象
|
|
88
|
+
* @return {boolean} 如果事件目标为画布本身则返回 false
|
|
89
|
+
*/
|
|
22
90
|
touchMove(evt) {
|
|
23
91
|
evt = evt || window.event;
|
|
24
92
|
evt.eventName = 'touchmove';
|
|
@@ -29,6 +97,13 @@ export default class jmEvents {
|
|
|
29
97
|
}
|
|
30
98
|
};
|
|
31
99
|
|
|
100
|
+
/**
|
|
101
|
+
* 触摸结束事件处理
|
|
102
|
+
*
|
|
103
|
+
* @method touchEnd
|
|
104
|
+
* @param {TouchEvent} evt 触摸事件对象
|
|
105
|
+
* @return {boolean} 如果事件目标为画布本身则返回 false
|
|
106
|
+
*/
|
|
32
107
|
touchEnd(evt) {
|
|
33
108
|
evt = evt || window.event;
|
|
34
109
|
evt.eventName = 'touchend';
|
|
@@ -40,6 +115,13 @@ export default class jmEvents {
|
|
|
40
115
|
}
|
|
41
116
|
};
|
|
42
117
|
|
|
118
|
+
/**
|
|
119
|
+
* 触摸取消事件处理
|
|
120
|
+
*
|
|
121
|
+
* @method touchCancel
|
|
122
|
+
* @param {TouchEvent} evt 触摸事件对象
|
|
123
|
+
* @return {boolean} 如果事件目标为画布本身则返回 false
|
|
124
|
+
*/
|
|
43
125
|
touchCancel(evt) {
|
|
44
126
|
evt = evt || window.event;
|
|
45
127
|
evt.eventName = 'touchcancel';
|
|
@@ -51,6 +133,13 @@ export default class jmEvents {
|
|
|
51
133
|
}
|
|
52
134
|
};
|
|
53
135
|
|
|
136
|
+
/**
|
|
137
|
+
* 轻触事件处理
|
|
138
|
+
*
|
|
139
|
+
* @method tap
|
|
140
|
+
* @param {Event} evt 事件对象
|
|
141
|
+
* @return {boolean} 如果事件目标为画布本身则返回 false
|
|
142
|
+
*/
|
|
54
143
|
tap(evt) {
|
|
55
144
|
evt = evt || window.event;
|
|
56
145
|
evt.eventName = 'tap';
|
|
@@ -62,23 +151,56 @@ export default class jmEvents {
|
|
|
62
151
|
}
|
|
63
152
|
};
|
|
64
153
|
|
|
154
|
+
/**
|
|
155
|
+
* 销毁事件处理器
|
|
156
|
+
*
|
|
157
|
+
* 移除所有绑定的事件监听器,释放资源。
|
|
158
|
+
*
|
|
159
|
+
* @method destroy
|
|
160
|
+
*/
|
|
65
161
|
destroy() {
|
|
66
162
|
this.mouseHandler.destroy();
|
|
67
163
|
this.keyHandler.destroy();
|
|
68
164
|
}
|
|
69
165
|
}
|
|
70
166
|
|
|
167
|
+
/**
|
|
168
|
+
* 鼠标事件处理器
|
|
169
|
+
*
|
|
170
|
+
* @class jmMouseEvent
|
|
171
|
+
* @private
|
|
172
|
+
*/
|
|
71
173
|
class jmMouseEvent {
|
|
174
|
+
/**
|
|
175
|
+
* 构造函数
|
|
176
|
+
*
|
|
177
|
+
* @param {jmEvents} instance jmEvents 实例
|
|
178
|
+
* @param {jmGraph} container jmGraph 实例
|
|
179
|
+
* @param {HTMLElement} target 事件目标元素
|
|
180
|
+
*/
|
|
72
181
|
constructor(instance, container, target) {
|
|
73
182
|
this.instance = instance;
|
|
74
183
|
this.container = container;
|
|
75
184
|
this.target = target || container;
|
|
76
185
|
|
|
186
|
+
/**
|
|
187
|
+
* 已绑定的事件映射表
|
|
188
|
+
* @type {Object}
|
|
189
|
+
*/
|
|
77
190
|
this.eventEvents = {};
|
|
78
191
|
|
|
79
192
|
this.init(instance, container, target);
|
|
80
193
|
}
|
|
81
194
|
|
|
195
|
+
/**
|
|
196
|
+
* 初始化鼠标事件绑定
|
|
197
|
+
*
|
|
198
|
+
* @method init
|
|
199
|
+
* @private
|
|
200
|
+
* @param {jmEvents} instance jmEvents 实例
|
|
201
|
+
* @param {jmGraph} container jmGraph 实例
|
|
202
|
+
* @param {HTMLElement} target 事件目标元素
|
|
203
|
+
*/
|
|
82
204
|
init(instance, container, target) {
|
|
83
205
|
const canvas = this.target;
|
|
84
206
|
const doc = typeof document != 'undefined'? document: null;
|
|
@@ -163,6 +285,13 @@ class jmMouseEvent {
|
|
|
163
285
|
},{ passive: false }));
|
|
164
286
|
}
|
|
165
287
|
|
|
288
|
+
/**
|
|
289
|
+
* 销毁鼠标事件处理器
|
|
290
|
+
*
|
|
291
|
+
* 移除所有绑定的鼠标事件监听器。
|
|
292
|
+
*
|
|
293
|
+
* @method destroy
|
|
294
|
+
*/
|
|
166
295
|
destroy() {
|
|
167
296
|
for(const name in this.eventEvents) {
|
|
168
297
|
const event = this.eventEvents[name];
|
|
@@ -172,17 +301,42 @@ class jmMouseEvent {
|
|
|
172
301
|
}
|
|
173
302
|
}
|
|
174
303
|
|
|
304
|
+
/**
|
|
305
|
+
* 键盘事件处理器
|
|
306
|
+
*
|
|
307
|
+
* @class jmKeyEvent
|
|
308
|
+
* @private
|
|
309
|
+
*/
|
|
175
310
|
class jmKeyEvent {
|
|
311
|
+
/**
|
|
312
|
+
* 构造函数
|
|
313
|
+
*
|
|
314
|
+
* @param {jmEvents} instance jmEvents 实例
|
|
315
|
+
* @param {jmGraph} container jmGraph 实例
|
|
316
|
+
* @param {HTMLElement} target 事件目标元素
|
|
317
|
+
*/
|
|
176
318
|
constructor(instance, container,target) {
|
|
177
319
|
this.instance = instance;
|
|
178
320
|
this.container = container;
|
|
179
321
|
this.target = target || container;
|
|
180
322
|
|
|
323
|
+
/**
|
|
324
|
+
* 已绑定的事件映射表
|
|
325
|
+
* @type {Object}
|
|
326
|
+
*/
|
|
181
327
|
this.eventEvents = {};
|
|
182
328
|
|
|
183
329
|
this.init(container, target);
|
|
184
330
|
}
|
|
185
331
|
|
|
332
|
+
/**
|
|
333
|
+
* 初始化键盘事件绑定
|
|
334
|
+
*
|
|
335
|
+
* @method init
|
|
336
|
+
* @private
|
|
337
|
+
* @param {jmGraph} container jmGraph 实例
|
|
338
|
+
* @param {HTMLElement} target 事件目标元素
|
|
339
|
+
*/
|
|
186
340
|
init(container, target) {
|
|
187
341
|
const doc = typeof document != 'undefined'? document: null;
|
|
188
342
|
|
package/src/core/jmFilter.js
CHANGED
|
@@ -1,13 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview jmFilter 滤镜类
|
|
3
|
+
*
|
|
4
|
+
* jmFilter 提供了 CSS 滤镜效果的管理和应用功能。
|
|
5
|
+
* 支持多种滤镜效果,可以组合使用。
|
|
6
|
+
*
|
|
7
|
+
* 支持的滤镜:
|
|
8
|
+
* - blur: 模糊效果
|
|
9
|
+
* - grayscale: 灰度效果
|
|
10
|
+
* - sepia: 复古效果
|
|
11
|
+
* - brightness: 亮度调节
|
|
12
|
+
* - contrast: 对比度调节
|
|
13
|
+
* - saturate: 饱和度调节
|
|
14
|
+
* - hue-rotate: 色相旋转
|
|
15
|
+
* - invert: 反色效果
|
|
16
|
+
* - opacity: 透明度调节
|
|
17
|
+
*
|
|
18
|
+
* @module jmFilter
|
|
19
|
+
* @author jmGraph Team
|
|
20
|
+
* @license MIT
|
|
21
|
+
*/
|
|
22
|
+
|
|
1
23
|
import {jmUtils} from "./jmUtils.js";
|
|
2
24
|
|
|
3
25
|
/**
|
|
4
|
-
* CSS滤镜效果类
|
|
26
|
+
* CSS 滤镜效果类
|
|
27
|
+
*
|
|
5
28
|
* 支持的滤镜: blur, grayscale, sepia, brightness, contrast, saturate, hue-rotate, invert, opacity
|
|
6
29
|
*
|
|
7
30
|
* @class jmFilter
|
|
8
31
|
* @param {string|object} opt 滤镜参数
|
|
9
32
|
* 字符串格式: "blur(2px) grayscale(50%) brightness(1.2)"
|
|
10
33
|
* 对象格式: { blur: 2, grayscale: 0.5, brightness: 1.2 }
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // 从字符串创建
|
|
37
|
+
* const filter = new jmFilter('blur(2px) grayscale(50%)');
|
|
38
|
+
*
|
|
39
|
+
* // 从对象创建
|
|
40
|
+
* const filter = new jmFilter({
|
|
41
|
+
* blur: 2,
|
|
42
|
+
* grayscale: 0.5,
|
|
43
|
+
* brightness: 1.2
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* // 应用到图形
|
|
47
|
+
* shape.style.filter = filter;
|
|
11
48
|
*/
|
|
12
49
|
export default class jmFilter {
|
|
13
50
|
constructor(opt) {
|
package/src/core/jmGradient.js
CHANGED
|
@@ -1,11 +1,56 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview jmGradient 渐变类
|
|
3
|
+
*
|
|
4
|
+
* jmGradient 提供了线性渐变和径向渐变的创建和管理功能。
|
|
5
|
+
* 支持从 CSS 渐变字符串解析,以及转换为 Canvas 渐变对象。
|
|
6
|
+
*
|
|
7
|
+
* 主要功能:
|
|
8
|
+
* - 线性渐变(linear-gradient)
|
|
9
|
+
* - 径向渐变(radial-gradient)
|
|
10
|
+
* - CSS 渐变字符串解析
|
|
11
|
+
* - Canvas 渐变对象生成
|
|
12
|
+
* - WebGL 渐变支持
|
|
13
|
+
*
|
|
14
|
+
* @module jmGradient
|
|
15
|
+
* @author jmGraph Team
|
|
16
|
+
* @license MIT
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import {jmUtils, colorKeywords} from "./jmUtils.js";
|
|
2
20
|
import {jmList} from "./jmList.js";
|
|
3
21
|
|
|
4
22
|
/**
|
|
5
23
|
* 渐变类
|
|
6
|
-
*
|
|
24
|
+
*
|
|
25
|
+
* 用于创建和管理线性渐变或径向渐变效果。
|
|
26
|
+
* 支持 CSS 渐变字符串格式解析,可以转换为 Canvas 或 WebGL 兼容的渐变对象。
|
|
27
|
+
*
|
|
7
28
|
* @class jmGradient
|
|
8
|
-
*
|
|
29
|
+
*
|
|
30
|
+
* @param {Object|string} opt 渐变参数对象或 CSS 渐变字符串
|
|
31
|
+
* @param {string} [opt.type='linear'] 渐变类型:'linear' 或 'radial'
|
|
32
|
+
* @param {number|string} [opt.x1] 起点X坐标(支持百分比)
|
|
33
|
+
* @param {number|string} [opt.y1] 起点Y坐标(支持百分比)
|
|
34
|
+
* @param {number|string} [opt.x2] 终点X坐标(支持百分比)
|
|
35
|
+
* @param {number|string} [opt.y2] 终点Y坐标(支持百分比)
|
|
36
|
+
* @param {number|string} [opt.r1] 内圆半径(径向渐变)
|
|
37
|
+
* @param {number|string} [opt.r2] 外圆半径(径向渐变)
|
|
38
|
+
* @param {Array} [opt.stops] 颜色停止点数组 [{offset, color}, ...]
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // 创建线性渐变
|
|
42
|
+
* const gradient = new jmGradient({
|
|
43
|
+
* type: 'linear',
|
|
44
|
+
* x1: 0, y1: 0,
|
|
45
|
+
* x2: '100%', y2: '100%',
|
|
46
|
+
* stops: [
|
|
47
|
+
* { offset: 0, color: '#ff0000' },
|
|
48
|
+
* { offset: 1, color: '#0000ff' }
|
|
49
|
+
* ]
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* // 从 CSS 字符串创建
|
|
53
|
+
* const gradient = new jmGradient('linear-gradient(180deg, #ff0000, #0000ff)');
|
|
9
54
|
*/
|
|
10
55
|
export default class jmGradient {
|
|
11
56
|
constructor(opt) {
|
|
@@ -220,7 +265,8 @@ export default class jmGradient {
|
|
|
220
265
|
console.warn('jmGradient: 渐变字符串为空');
|
|
221
266
|
return;
|
|
222
267
|
}
|
|
223
|
-
|
|
268
|
+
// 使用 [\s\S] 匹配任意字符(包括换行符),支持多行渐变字符串
|
|
269
|
+
const gradientMatch = s.match(/(linear|radial)-gradient\s*\(\s*([\s\S]+)\)/i);
|
|
224
270
|
if(!gradientMatch || gradientMatch.length < 3) {
|
|
225
271
|
console.warn('jmGradient: 无效的渐变字符串格式: "' + s + '"');
|
|
226
272
|
return;
|
|
@@ -605,14 +651,19 @@ export default class jmGradient {
|
|
|
605
651
|
const hexPattern = /^#([a-fA-F0-9]{3,8})$/;
|
|
606
652
|
if(hexPattern.test(color)) return true;
|
|
607
653
|
|
|
608
|
-
|
|
654
|
+
// 支持 rgba(r,g,b,a) 和 rgba(r, g, b, a) 等各种空格格式
|
|
655
|
+
const rgbPattern = /^rgba?\s*\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*(,\s*[\d.]+\s*)?\)$/i;
|
|
609
656
|
if(rgbPattern.test(color)) return true;
|
|
610
657
|
|
|
611
|
-
const hslPattern = /^hsla?\s*\(\s
|
|
658
|
+
const hslPattern = /^hsla?\s*\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*(,\s*[\d.]+\s*)?\)$/i;
|
|
612
659
|
if(hslPattern.test(color)) return true;
|
|
613
660
|
|
|
614
|
-
|
|
615
|
-
if(
|
|
661
|
+
// 使用 jmUtils 中的完整 CSS 颜色关键字表
|
|
662
|
+
if(colorKeywords && colorKeywords[color.toLowerCase()]) return true;
|
|
663
|
+
|
|
664
|
+
// 宽松处理:符合 CSS 关键字命名规则的字符串也视为有效颜色
|
|
665
|
+
// (纯字母,可能在运行时被浏览器或其他环境解析)
|
|
666
|
+
if(/^[a-zA-Z]+$/.test(color)) return true;
|
|
616
667
|
|
|
617
668
|
return false;
|
|
618
669
|
}
|
package/src/core/jmGraph.js
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview jmGraph 主画布类
|
|
3
|
+
*
|
|
4
|
+
* jmGraph 是 jmGraph 库的核心类,代表一个完整的画布实例。
|
|
5
|
+
* 它继承自 jmControl,提供了完整的图形渲染、事件处理、缩放平移等功能。
|
|
6
|
+
*
|
|
7
|
+
* 主要功能:
|
|
8
|
+
* - Canvas/WebGL 双渲染模式支持
|
|
9
|
+
* - 图形创建与管理(createShape, createLine, createPath 等)
|
|
10
|
+
* - 渐变和阴影效果(createLinearGradient, createRadialGradient, createShadow)
|
|
11
|
+
* - 缩放和平移(setZoom, pan, resetTransform)
|
|
12
|
+
* - 导出功能(toDataURL, exportToPNG, exportToJPEG, exportToSVG)
|
|
13
|
+
* - 自动刷新动画循环(autoRefresh)
|
|
14
|
+
* - 微信小程序支持
|
|
15
|
+
*
|
|
16
|
+
* @module jmGraph
|
|
17
|
+
* @author jmGraph Team
|
|
18
|
+
* @license MIT
|
|
19
|
+
*/
|
|
20
|
+
|
|
1
21
|
import {jmUtils} from "./jmUtils.js";
|
|
2
22
|
import {jmList} from "./jmList.js";
|
|
3
23
|
import {jmProperty} from './jmProperty.js';
|
|
@@ -9,15 +29,39 @@ import {jmControl} from "./jmControl.js";
|
|
|
9
29
|
import {jmPath} from "./jmPath.js";
|
|
10
30
|
|
|
11
31
|
/**
|
|
12
|
-
* jmGraph
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
32
|
+
* jmGraph 画图类
|
|
33
|
+
*
|
|
34
|
+
* 对 Canvas 画图 API 进行二次封装,使其更易调用,省去很多重复的工作。
|
|
35
|
+
* 支持多种图形的创建、渲染、交互和导出。
|
|
36
|
+
*
|
|
16
37
|
* @class jmGraph
|
|
17
38
|
* @extends jmControl
|
|
18
|
-
*
|
|
19
|
-
* @param {
|
|
20
|
-
* @param {
|
|
39
|
+
*
|
|
40
|
+
* @param {HTMLElement|string} canvas Canvas 元素或元素 ID
|
|
41
|
+
* @param {Object} [option] 配置选项
|
|
42
|
+
* @param {number} [option.width] 画布宽度
|
|
43
|
+
* @param {number} [option.height] 画布高度
|
|
44
|
+
* @param {string} [option.mode='2d'] 渲染模式:'2d' 或 'webgl'
|
|
45
|
+
* @param {boolean} [option.autoRefresh=false] 是否自动刷新
|
|
46
|
+
* @param {Object} [option.shapes] 自定义图形类型映射
|
|
47
|
+
* @param {function} [callback] 初始化完成后的回调函数
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* // 创建画布实例
|
|
51
|
+
* const graph = new jmGraph('canvasId', {
|
|
52
|
+
* width: 800,
|
|
53
|
+
* height: 600,
|
|
54
|
+
* mode: '2d'
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* // 创建一个矩形
|
|
58
|
+
* const rect = graph.createShape('rect', {
|
|
59
|
+
* x: 100, y: 100,
|
|
60
|
+
* width: 200, height: 150,
|
|
61
|
+
* style: { fill: '#ff0000' }
|
|
62
|
+
* });
|
|
63
|
+
* graph.children.add(rect);
|
|
64
|
+
* graph.refresh();
|
|
21
65
|
*/
|
|
22
66
|
export default class jmGraph extends jmControl {
|
|
23
67
|
|
package/src/core/jmLayer.js
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview jmLayer 图层类
|
|
3
|
+
*
|
|
4
|
+
* jmLayer 提供了图层管理功能,用于组织和控制图形对象的显示和交互。
|
|
5
|
+
* 图层可以包含多个图形对象,支持可见性和锁定控制。
|
|
6
|
+
*
|
|
7
|
+
* 主要功能:
|
|
8
|
+
* - 图层可见性控制
|
|
9
|
+
* - 图层锁定(防止交互)
|
|
10
|
+
* - 图形对象组织和管理
|
|
11
|
+
* - 批量操作支持
|
|
12
|
+
*
|
|
13
|
+
* @module jmLayer
|
|
14
|
+
* @author jmGraph Team
|
|
15
|
+
* @license MIT
|
|
16
|
+
*/
|
|
17
|
+
|
|
1
18
|
import {jmControl} from "./jmControl.js";
|
|
2
19
|
|
|
3
20
|
/**
|
|
4
21
|
* 图层类
|
|
5
|
-
*
|
|
6
|
-
*
|
|
22
|
+
*
|
|
23
|
+
* 用于组织和管理图形对象,支持可见性和锁定控制。
|
|
24
|
+
* 图层可以包含多个图形对象,并控制它们的显示和交互。
|
|
7
25
|
*
|
|
8
26
|
* @class jmLayer
|
|
9
27
|
* @extends jmControl
|
|
@@ -12,6 +30,20 @@ import {jmControl} from "./jmControl.js";
|
|
|
12
30
|
* @param {boolean} [params.visible=true] 图层是否可见
|
|
13
31
|
* @param {boolean} [params.locked=false] 图层是否锁定(锁定后不可交互)
|
|
14
32
|
* @param {jmGraph} [params.graph] 所属的画布对象
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // 创建图层
|
|
36
|
+
* const layer = new jmLayer({
|
|
37
|
+
* name: 'background',
|
|
38
|
+
* visible: true,
|
|
39
|
+
* locked: false
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* // 添加图形到图层
|
|
43
|
+
* layer.children.add(rect);
|
|
44
|
+
*
|
|
45
|
+
* // 锁定图层
|
|
46
|
+
* layer.locked = true;
|
|
15
47
|
*/
|
|
16
48
|
export default class jmLayer extends jmControl {
|
|
17
49
|
|