jmgraph 3.2.16 → 3.2.18

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.
Files changed (77) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +251 -428
  3. package/build/gulpfile.js +142 -142
  4. package/build/package-lock.json +10666 -0
  5. package/build/package.json +71 -71
  6. package/dev.js +9 -9
  7. package/dist/jmgraph.core.min.js +1 -1
  8. package/dist/jmgraph.core.min.js.map +1 -1
  9. package/dist/jmgraph.js +3500 -2668
  10. package/dist/jmgraph.min.js +1 -1
  11. package/example/ball.html +216 -216
  12. package/example/base.html +111 -111
  13. package/example/canvas.html +53 -53
  14. package/example/cell.html +283 -283
  15. package/example/controls/arc.html +128 -128
  16. package/example/controls/arrowline.html +77 -77
  17. package/example/controls/bezier.html +298 -298
  18. package/example/controls/img.html +96 -96
  19. package/example/controls/label.html +86 -86
  20. package/example/controls/line.html +172 -172
  21. package/example/controls/prismatic.html +62 -62
  22. package/example/controls/rect.html +63 -63
  23. package/example/controls/resize.html +111 -111
  24. package/example/controls/test.html +359 -359
  25. package/example/es.html +69 -69
  26. package/example/es5module.html +62 -63
  27. package/example/heartarc.html +115 -115
  28. package/example/index.html +46 -46
  29. package/example/js/require.js +4 -4
  30. package/example/love/img/bling/bling.tps +265 -265
  31. package/example/love/img/bling.json +87 -87
  32. package/example/love/img/bling.tps +295 -295
  33. package/example/love/img/love.json +95 -95
  34. package/example/love/img/love.tps +315 -315
  35. package/example/love/img/qq/qq.tps +399 -399
  36. package/example/love/img/qq.json +242 -242
  37. package/example/love/index.html +40 -40
  38. package/example/love/js/game.js +558 -558
  39. package/example/music.html +210 -210
  40. package/example/node/test.js +137 -137
  41. package/example/pdf.html +186 -186
  42. package/example/progress.html +172 -172
  43. package/example/pso.html +147 -147
  44. package/example/sort.html +804 -815
  45. package/example/tweenjs.html +83 -83
  46. package/example/webgl.html +278 -278
  47. package/example/xfj/index.html +331 -331
  48. package/example/xfj/shake.js +48 -48
  49. package/example/xfj/testori.html +75 -75
  50. package/index.js +99 -99
  51. package/package.json +58 -56
  52. package/src/core/jmControl.js +1376 -1531
  53. package/src/core/jmEvents.js +240 -281
  54. package/src/core/jmGradient.js +231 -231
  55. package/src/core/jmGraph.js +569 -569
  56. package/src/core/jmList.js +92 -157
  57. package/src/core/jmObject.js +83 -103
  58. package/src/core/jmPath.js +35 -35
  59. package/src/core/jmProperty.js +71 -110
  60. package/src/core/jmShadow.js +65 -65
  61. package/src/core/jmUtils.js +906 -919
  62. package/src/lib/earcut.js +680 -680
  63. package/src/lib/earcut.md +73 -73
  64. package/src/lib/webgl/base.js +522 -452
  65. package/src/lib/webgl/core/buffer.js +48 -48
  66. package/src/lib/webgl/core/mapSize.js +40 -40
  67. package/src/lib/webgl/core/mapType.js +43 -43
  68. package/src/lib/webgl/core/program.js +138 -138
  69. package/src/lib/webgl/core/shader.js +13 -13
  70. package/src/lib/webgl/core/texture.js +60 -60
  71. package/src/lib/webgl/gradient.js +168 -168
  72. package/src/lib/webgl/index.js +137 -11
  73. package/src/lib/webgl/path.js +568 -561
  74. package/src/shapes/jmArrowLine.js +36 -36
  75. package/src/shapes/jmImage.js +244 -244
  76. package/src/shapes/jmLabel.js +271 -271
  77. package/src/shapes/jmResize.js +332 -330
@@ -1,281 +1,240 @@
1
- import {jmUtils} from "./jmUtils.js";
2
- /**
3
- * 事件模型
4
- *
5
- * @class jmEvents
6
- * @for jmGraph
7
- */
8
- export default class jmEvents {
9
-
10
- constructor(container, target) {
11
- this.container = container;
12
- this.target = target || container;
13
- this.mouseHandler = new jmMouseEvent(this, container, target);
14
- this.keyHandler = new jmKeyEvent(this, container, target);
15
- }
16
-
17
- touchStart(evt) {
18
- evt = evt || window.event;
19
- evt.eventName = 'touchstart';
20
- this.container.raiseEvent('touchstart',evt);
21
- let t = evt.target || evt.srcElement;
22
- if(t == this.target) {
23
- //if(evt.preventDefault) evt.preventDefault();
24
- return false;
25
- }
26
- };
27
-
28
- touchMove(evt) {
29
- evt = evt || window.event;
30
- evt.eventName = 'touchmove';
31
- this.container.raiseEvent('touchmove',evt);
32
- let t = evt.target || evt.srcElement;
33
- if(t == this.target) {
34
- //if(evt.preventDefault) evt.preventDefault();
35
- return false;
36
- }
37
- };
38
-
39
- touchEnd(evt) {
40
- evt = evt || window.event;
41
- evt.eventName = 'touchend';
42
-
43
- this.container.raiseEvent('touchend',evt);
44
- let t = evt.target || evt.srcElement;
45
- if(t == this.target) {
46
- //if(evt.preventDefault) evt.preventDefault();
47
- return false;
48
- }
49
- };
50
-
51
- touchCancel(evt) {
52
- evt = evt || window.event;
53
- evt.eventName = 'touchcancel';
54
-
55
- this.container.raiseEvent('touchcancel',evt);
56
- let t = evt.target || evt.srcElement;
57
- if(t == this.target) {
58
- //if(evt.preventDefault) evt.preventDefault();
59
- return false;
60
- }
61
- };
62
-
63
- tap(evt) {
64
- evt = evt || window.event;
65
- evt.eventName = 'tap';
66
-
67
- this.container.raiseEvent('tap',evt);
68
- let t = evt.target || evt.srcElement;
69
- if(t == this.target) {
70
- //if(evt.preventDefault) evt.preventDefault();
71
- return false;
72
- }
73
- };
74
-
75
- // 销毁
76
- destroy() {
77
- this.mouseHandler.destroy();
78
- this.keyHandler.destroy();
79
- }
80
- }
81
-
82
- /**
83
- * 鼠标事件处理对象,container 为事件主体,target为响应事件对象
84
- */
85
- class jmMouseEvent {
86
- constructor(instance, container, target) {
87
- this.instance = instance;
88
- this.container = container;
89
- this.target = target || container;
90
-
91
- this.eventEvents = {};// 所有绑定的事件
92
-
93
- this.init(instance, container, target);
94
- }
95
-
96
- init(instance, container, target) {
97
- let canvas = this.target;
98
- let doc = typeof document != 'undefined'? document: null;
99
- //禁用鼠标右健系统菜单
100
- //canvas.oncontextmenu = function() {
101
- // return false;
102
- //};
103
-
104
- this.eventEvents['mousedown'] = jmUtils.bindEvent(this.target,'mousedown',function(evt) {
105
- evt = evt || window.event;
106
- evt.eventName = 'mousedown';
107
- let r = container.raiseEvent('mousedown',evt);
108
- //if(r === false) {
109
- //if(evt.preventDefault) evt.preventDefault();
110
- //return false;
111
- //}
112
- });
113
-
114
- this.eventEvents['mousemove'] = jmUtils.bindEvent(this.target,'mousemove',function(evt) {
115
- evt = evt || window.event;
116
- evt.eventName = 'mousemove';
117
- let target = evt.target || evt.srcElement;
118
- if(target == canvas) {
119
- let r = container.raiseEvent('mousemove',evt);
120
- //if(r === false) {
121
- if(evt.preventDefault) evt.preventDefault();
122
- return false;
123
- //}
124
- }
125
- });
126
-
127
- this.eventEvents['mouseover'] = jmUtils.bindEvent(this.target,'mouseover',function(evt) {
128
- evt = evt || window.event;
129
- evt.eventName = 'mouseover';
130
- container.raiseEvent('mouseover',evt);
131
- });
132
- this.eventEvents['mouseleave'] = jmUtils.bindEvent(this.target,'mouseleave',function(evt) {
133
- evt = evt || window.event;
134
- evt.eventName = 'mouseleave';
135
- container.raiseEvent('mouseleave',evt);
136
- });
137
- this.eventEvents['mouseout'] = jmUtils.bindEvent(this.target,'mouseout',function(evt) {
138
- evt = evt || window.event;
139
- evt.eventName = 'mouseout';
140
- container.raiseEvent('mouseout',evt);
141
- });
142
- doc && (this.eventEvents['mouseup'] = jmUtils.bindEvent(doc,'mouseup',function(evt) {
143
- evt = evt || window.event;
144
- evt.eventName = 'mouseup';
145
- //let target = evt.target || evt.srcElement;
146
- //if(target == canvas) {
147
- let r = container.raiseEvent('mouseup',evt);
148
- if(r === false) {
149
- if(evt.preventDefault) evt.preventDefault();
150
- return false;
151
- }
152
- //}
153
- }));
154
-
155
- this.eventEvents['dblclick'] = jmUtils.bindEvent(this.target,'dblclick',function(evt) {
156
- evt = evt || window.event;
157
- evt.eventName = 'dblclick';
158
- container.raiseEvent('dblclick',evt);
159
- });
160
- this.eventEvents['click'] = jmUtils.bindEvent(this.target,'click',function(evt) {
161
- evt = evt || window.event;
162
- evt.eventName = 'click';
163
- container.raiseEvent('click',evt);
164
- });
165
-
166
- doc && (this.eventEvents['resize'] = jmUtils.bindEvent(doc,'resize',function(evt) {
167
- evt = evt || window.event;
168
- evt.eventName = 'resize';
169
- return container.raiseEvent('resize',evt);
170
- }));
171
-
172
- // passive: false 为了让浏览器不告警并且preventDefault有效
173
- // 另一种处理:touch-action: none; 这样任何触摸事件都不会产生默认行为,但是 touch 事件照样触发。
174
- this.eventEvents['touchstart'] = jmUtils.bindEvent(this.target,'touchstart', function(evt) {
175
- evt.eventName = 'touchstart';
176
- return instance.touchStart(evt);
177
- },{ passive: false });
178
-
179
- this.eventEvents['touchmove'] = jmUtils.bindEvent(this.target,'touchmove', function(evt) {
180
- evt.eventName = 'touchmove';
181
- return instance.touchMove(evt);
182
- },{ passive: false });
183
-
184
- doc && (this.eventEvents['touchend'] = jmUtils.bindEvent(doc,'touchend', function(evt) {
185
- evt.eventName = 'touchend';
186
- return instance.touchEnd(evt);
187
- },{ passive: false }));
188
-
189
- doc && (this.eventEvents['touchcancel'] = jmUtils.bindEvent(doc,'touchcancel', function(evt) {
190
- evt.eventName = 'touchcancel';
191
- return instance.touchCancel(evt);
192
- },{ passive: false }));
193
- }
194
-
195
- // 销毁所有事件
196
- destroy() {
197
- for(let name in this.eventEvents) {
198
- const event = this.eventEvents[name];
199
- if(!event || !event.fun) continue;
200
- jmUtils.removeEvent(event.target, name, event.fun);
201
- }
202
- }
203
- }
204
-
205
- /**
206
- * 健盘事件处理对象,container 为事件主体,target为响应事件对象
207
- */
208
- class jmKeyEvent {
209
- constructor(instance, container,target) {
210
- this.instance = instance;
211
- this.container = container;
212
- this.target = target || container;
213
-
214
- this.eventEvents = {};// 所有绑定的事件
215
-
216
- this.init(container, target);
217
- }
218
-
219
- /**
220
- * 初始化健盘事件
221
- */
222
- init(container, target) {
223
- let doc = typeof document != 'undefined'? document: null;
224
- /**
225
- * 检查是否触发健盘事件至画布
226
- * 如果触发对象为输入框等对象则不响应事件
227
- *
228
- */
229
- let checkKeyEvent = (evt) => {
230
- let target = evt.srcElement || evt.target;
231
- if(target && (target.tagName == 'INPUT'
232
- || target.tagName == 'TEXTAREA'
233
- || target.tagName == 'ANCHOR'
234
- || target.tagName == 'FORM'
235
- || target.tagName == 'FILE'
236
- || target.tagName == 'IMG'
237
- || target.tagName == 'HIDDEN'
238
- || target.tagName == 'RADIO'
239
- || target.tagName == 'TEXT' )) {
240
- return false;
241
- }
242
- return true;
243
- }
244
-
245
- doc && (this.eventEvents['keypress'] = jmUtils.bindEvent(doc,'keypress',function(evt) {
246
- evt = evt || window.event;
247
- if(!checkKeyEvent(evt)) return;//如果事件为其它输入框,则不响应
248
- let r = container.raiseEvent('keypress',evt);
249
- if(r === false && evt.preventDefault)
250
- evt.preventDefault();
251
- return r;
252
- }));
253
- doc && (this.eventEvents['keydown'] = jmUtils.bindEvent(doc,'keydown',function(evt) {
254
- evt = evt || window.event;
255
- if(!checkKeyEvent(evt)) return;//如果事件为其它输入框,则不响应
256
- let r = container.raiseEvent('keydown',evt);
257
- if(r === false && evt.preventDefault)
258
- evt.preventDefault();
259
- return r;
260
- }));
261
- doc && (this.eventEvents['keyup'] = jmUtils.bindEvent(doc,'keyup',function(evt) {
262
- evt = evt || window.event;
263
- if(!checkKeyEvent(evt)) return;//如果事件为其它输入框,则不响应
264
- let r = container.raiseEvent('keyup',evt);
265
- if(r === false && evt.preventDefault)
266
- evt.preventDefault();
267
- return r;
268
- }));
269
- }
270
-
271
- // 销毁所有事件
272
- destroy() {
273
- for(let name in this.eventEvents) {
274
- const event = this.eventEvents[name];
275
- if(!event || !event.fun) continue;
276
- jmUtils.removeEvent(event.target, name, event.fun);
277
- }
278
- }
279
- }
280
-
281
- export { jmEvents };
1
+ import {jmUtils} from "./jmUtils.js";
2
+
3
+ export default class jmEvents {
4
+
5
+ constructor(container, target) {
6
+ this.container = container;
7
+ this.target = target || container;
8
+ this.mouseHandler = new jmMouseEvent(this, container, target);
9
+ this.keyHandler = new jmKeyEvent(this, container, target);
10
+ }
11
+
12
+ touchStart(evt) {
13
+ evt = evt || window.event;
14
+ evt.eventName = 'touchstart';
15
+ this.container.raiseEvent('touchstart',evt);
16
+ const t = evt.target || evt.srcElement;
17
+ if(t == this.target) {
18
+ return false;
19
+ }
20
+ };
21
+
22
+ touchMove(evt) {
23
+ evt = evt || window.event;
24
+ evt.eventName = 'touchmove';
25
+ this.container.raiseEvent('touchmove',evt);
26
+ const t = evt.target || evt.srcElement;
27
+ if(t == this.target) {
28
+ return false;
29
+ }
30
+ };
31
+
32
+ touchEnd(evt) {
33
+ evt = evt || window.event;
34
+ evt.eventName = 'touchend';
35
+
36
+ this.container.raiseEvent('touchend',evt);
37
+ const t = evt.target || evt.srcElement;
38
+ if(t == this.target) {
39
+ return false;
40
+ }
41
+ };
42
+
43
+ touchCancel(evt) {
44
+ evt = evt || window.event;
45
+ evt.eventName = 'touchcancel';
46
+
47
+ this.container.raiseEvent('touchcancel',evt);
48
+ const t = evt.target || evt.srcElement;
49
+ if(t == this.target) {
50
+ return false;
51
+ }
52
+ };
53
+
54
+ tap(evt) {
55
+ evt = evt || window.event;
56
+ evt.eventName = 'tap';
57
+
58
+ this.container.raiseEvent('tap',evt);
59
+ const t = evt.target || evt.srcElement;
60
+ if(t == this.target) {
61
+ return false;
62
+ }
63
+ };
64
+
65
+ destroy() {
66
+ this.mouseHandler.destroy();
67
+ this.keyHandler.destroy();
68
+ }
69
+ }
70
+
71
+ class jmMouseEvent {
72
+ constructor(instance, container, target) {
73
+ this.instance = instance;
74
+ this.container = container;
75
+ this.target = target || container;
76
+
77
+ this.eventEvents = {};
78
+
79
+ this.init(instance, container, target);
80
+ }
81
+
82
+ init(instance, container, target) {
83
+ const canvas = this.target;
84
+ const doc = typeof document != 'undefined'? document: null;
85
+
86
+ this.eventEvents['mousedown'] = jmUtils.bindEvent(this.target,'mousedown',function(evt) {
87
+ evt = evt || window.event;
88
+ evt.eventName = 'mousedown';
89
+ container.raiseEvent('mousedown',evt);
90
+ });
91
+
92
+ this.eventEvents['mousemove'] = jmUtils.bindEvent(this.target,'mousemove',function(evt) {
93
+ evt = evt || window.event;
94
+ evt.eventName = 'mousemove';
95
+ const target = evt.target || evt.srcElement;
96
+ if(target == canvas) {
97
+ container.raiseEvent('mousemove',evt);
98
+ if(evt.preventDefault) evt.preventDefault();
99
+ return false;
100
+ }
101
+ });
102
+
103
+ this.eventEvents['mouseover'] = jmUtils.bindEvent(this.target,'mouseover',function(evt) {
104
+ evt = evt || window.event;
105
+ evt.eventName = 'mouseover';
106
+ container.raiseEvent('mouseover',evt);
107
+ });
108
+ this.eventEvents['mouseleave'] = jmUtils.bindEvent(this.target,'mouseleave',function(evt) {
109
+ evt = evt || window.event;
110
+ evt.eventName = 'mouseleave';
111
+ container.raiseEvent('mouseleave',evt);
112
+ });
113
+ this.eventEvents['mouseout'] = jmUtils.bindEvent(this.target,'mouseout',function(evt) {
114
+ evt = evt || window.event;
115
+ evt.eventName = 'mouseout';
116
+ container.raiseEvent('mouseout',evt);
117
+ });
118
+ doc && (this.eventEvents['mouseup'] = jmUtils.bindEvent(doc,'mouseup',function(evt) {
119
+ evt = evt || window.event;
120
+ evt.eventName = 'mouseup';
121
+ const r = container.raiseEvent('mouseup',evt);
122
+ if(r === false) {
123
+ if(evt.preventDefault) evt.preventDefault();
124
+ return false;
125
+ }
126
+ }));
127
+
128
+ this.eventEvents['dblclick'] = jmUtils.bindEvent(this.target,'dblclick',function(evt) {
129
+ evt = evt || window.event;
130
+ evt.eventName = 'dblclick';
131
+ container.raiseEvent('dblclick',evt);
132
+ });
133
+ this.eventEvents['click'] = jmUtils.bindEvent(this.target,'click',function(evt) {
134
+ evt = evt || window.event;
135
+ evt.eventName = 'click';
136
+ container.raiseEvent('click',evt);
137
+ });
138
+
139
+ doc && (this.eventEvents['resize'] = jmUtils.bindEvent(doc,'resize',function(evt) {
140
+ evt = evt || window.event;
141
+ evt.eventName = 'resize';
142
+ return container.raiseEvent('resize',evt);
143
+ }));
144
+
145
+ this.eventEvents['touchstart'] = jmUtils.bindEvent(this.target,'touchstart', function(evt) {
146
+ evt.eventName = 'touchstart';
147
+ return instance.touchStart(evt);
148
+ },{ passive: false });
149
+
150
+ this.eventEvents['touchmove'] = jmUtils.bindEvent(this.target,'touchmove', function(evt) {
151
+ evt.eventName = 'touchmove';
152
+ return instance.touchMove(evt);
153
+ },{ passive: false });
154
+
155
+ doc && (this.eventEvents['touchend'] = jmUtils.bindEvent(doc,'touchend', function(evt) {
156
+ evt.eventName = 'touchend';
157
+ return instance.touchEnd(evt);
158
+ },{ passive: false }));
159
+
160
+ doc && (this.eventEvents['touchcancel'] = jmUtils.bindEvent(doc,'touchcancel', function(evt) {
161
+ evt.eventName = 'touchcancel';
162
+ return instance.touchCancel(evt);
163
+ },{ passive: false }));
164
+ }
165
+
166
+ destroy() {
167
+ for(const name in this.eventEvents) {
168
+ const event = this.eventEvents[name];
169
+ if(!event || !event.fun) continue;
170
+ jmUtils.removeEvent(event.target, name, event.fun);
171
+ }
172
+ }
173
+ }
174
+
175
+ class jmKeyEvent {
176
+ constructor(instance, container,target) {
177
+ this.instance = instance;
178
+ this.container = container;
179
+ this.target = target || container;
180
+
181
+ this.eventEvents = {};
182
+
183
+ this.init(container, target);
184
+ }
185
+
186
+ init(container, target) {
187
+ const doc = typeof document != 'undefined'? document: null;
188
+
189
+ const checkKeyEvent = (evt) => {
190
+ const target = evt.srcElement || evt.target;
191
+ if(target && (target.tagName == 'INPUT'
192
+ || target.tagName == 'TEXTAREA'
193
+ || target.tagName == 'ANCHOR'
194
+ || target.tagName == 'FORM'
195
+ || target.tagName == 'FILE'
196
+ || target.tagName == 'IMG'
197
+ || target.tagName == 'HIDDEN'
198
+ || target.tagName == 'RADIO'
199
+ || target.tagName == 'TEXT' )) {
200
+ return false;
201
+ }
202
+ return true;
203
+ }
204
+
205
+ doc && (this.eventEvents['keypress'] = jmUtils.bindEvent(doc,'keypress',function(evt) {
206
+ evt = evt || window.event;
207
+ if(!checkKeyEvent(evt)) return;
208
+ const r = container.raiseEvent('keypress',evt);
209
+ if(r === false && evt.preventDefault)
210
+ evt.preventDefault();
211
+ return r;
212
+ }));
213
+ doc && (this.eventEvents['keydown'] = jmUtils.bindEvent(doc,'keydown',function(evt) {
214
+ evt = evt || window.event;
215
+ if(!checkKeyEvent(evt)) return;
216
+ const r = container.raiseEvent('keydown',evt);
217
+ if(r === false && evt.preventDefault)
218
+ evt.preventDefault();
219
+ return r;
220
+ }));
221
+ doc && (this.eventEvents['keyup'] = jmUtils.bindEvent(doc,'keyup',function(evt) {
222
+ evt = evt || window.event;
223
+ if(!checkKeyEvent(evt)) return;
224
+ const r = container.raiseEvent('keyup',evt);
225
+ if(r === false && evt.preventDefault)
226
+ evt.preventDefault();
227
+ return r;
228
+ }));
229
+ }
230
+
231
+ destroy() {
232
+ for(const name in this.eventEvents) {
233
+ const event = this.eventEvents[name];
234
+ if(!event || !event.fun) continue;
235
+ jmUtils.removeEvent(event.target, name, event.fun);
236
+ }
237
+ }
238
+ }
239
+
240
+ export { jmEvents };