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/README.md
CHANGED
|
@@ -141,6 +141,194 @@ jmGraph 支持简化的样式名称和原生 Canvas 样式:
|
|
|
141
141
|
| clipPath | - | 裁剪路径,传入图形控件实例 |
|
|
142
142
|
| mask | - | 遮罩效果,传入图形控件实例 |
|
|
143
143
|
|
|
144
|
+
### 渐变 (jmGradient)
|
|
145
|
+
|
|
146
|
+
jmGraph 支持完整的 CSS 渐变语法,通过 `jmGradient` 类实现。支持线性渐变和径向渐变。
|
|
147
|
+
|
|
148
|
+
#### 支持的格式
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
// 1. 角度格式(deg/rad/grad/turn)
|
|
152
|
+
'linear-gradient(180deg, #8b5cf6 0%, #6366f1 50%, #4f46e5 100%)'
|
|
153
|
+
'linear-gradient(0.5turn, #10b981, #3b82f6)'
|
|
154
|
+
'linear-gradient(3.14159rad, #f59e0b, #ef4444)'
|
|
155
|
+
|
|
156
|
+
// 2. 方向关键词
|
|
157
|
+
'linear-gradient(to top, #e94560, #00d4ff)'
|
|
158
|
+
'linear-gradient(to right, #ffd93d, #e94560)'
|
|
159
|
+
'linear-gradient(to top right, #8b5cf6, #f59e0b)'
|
|
160
|
+
|
|
161
|
+
// 3. 坐标格式(x1 y1 x2 y2)—— 注意:坐标之间用空格分隔,不要用逗号
|
|
162
|
+
'linear-gradient(50% 0 50% 100%, rgba(36,159,218,0) 1, rgba(36,159,218,0.8) 0)'
|
|
163
|
+
|
|
164
|
+
// 4. 径向渐变
|
|
165
|
+
'radial-gradient(circle, #e94560, #8b5cf6)'
|
|
166
|
+
'radial-gradient(ellipse at top, #06b6d4, #8b5cf6)'
|
|
167
|
+
'radial-gradient(50% 50% 100% 50% 50% 0%, #ffd93d 0%, #f59e0b 100%)'
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
#### 使用方式
|
|
171
|
+
|
|
172
|
+
```javascript
|
|
173
|
+
// 方式一:直接使用字符串(最简单)
|
|
174
|
+
const rect = g.createShape('rect', {
|
|
175
|
+
position: {x: 100, y: 100}, width: 200, height: 100,
|
|
176
|
+
style: { fill: 'linear-gradient(180deg, #e94560 0%, #00d4ff 100%)' }
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// 方式二:使用 jmGradient 对象
|
|
180
|
+
import { jmGradient } from 'jmgraph';
|
|
181
|
+
const gradient = new jmGradient({
|
|
182
|
+
type: 'linear',
|
|
183
|
+
x1: '50%', y1: '0%',
|
|
184
|
+
x2: '50%', y2: '100%',
|
|
185
|
+
stops: [
|
|
186
|
+
{ offset: 0, color: 'rgba(36,159,218,0)' },
|
|
187
|
+
{ offset: 1, color: 'rgba(36,159,218,0.8)' }
|
|
188
|
+
]
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
const rect2 = g.createShape('rect', {
|
|
192
|
+
position: {x: 100, y: 220}, width: 200, height: 100,
|
|
193
|
+
style: { fill: gradient }
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// 方式三:使用 createLinearGradient / createRadialGradient 便捷方法
|
|
197
|
+
const linearGradient = g.createLinearGradient(0, 0, 0, 100);
|
|
198
|
+
linearGradient.addStop(0, '#e94560');
|
|
199
|
+
linearGradient.addStop(1, '#00d4ff');
|
|
200
|
+
|
|
201
|
+
const radialGradient = g.createRadialGradient(100, 100, 0, 100, 100, 50);
|
|
202
|
+
radialGradient.addStop(0, '#ffd93d');
|
|
203
|
+
radialGradient.addStop(1, '#f59e0b');
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
#### 偏移量格式
|
|
207
|
+
|
|
208
|
+
偏移量(offset)表示颜色在渐变中的位置,支持三种写法:
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
// 小数(0~1)—— 0 表示渐变起点,1 表示渐变终点
|
|
212
|
+
'linear-gradient(180deg, #e94560 0, #00d4ff 0.5, #8b5cf6 1)'
|
|
213
|
+
|
|
214
|
+
// 百分比(0%~100%)
|
|
215
|
+
'linear-gradient(180deg, #e94560 0%, #00d4ff 50%, #8b5cf6 100%)'
|
|
216
|
+
|
|
217
|
+
// 省略偏移量(首尾自动为 0 和 1,中间均匀分布)
|
|
218
|
+
'linear-gradient(180deg, #e94560, #00d4ff, #8b5cf6)'
|
|
219
|
+
// 等价于 'linear-gradient(180deg, #e94560 0, #00d4ff 0.5, #8b5cf6 1)'
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
> **注意**:偏移量 `1` 和 `100%` 是等价的,都表示渐变终点。偏移量会自动归一化到 0~1 范围。
|
|
223
|
+
|
|
224
|
+
#### 颜色格式支持
|
|
225
|
+
|
|
226
|
+
支持多种颜色格式:
|
|
227
|
+
|
|
228
|
+
```javascript
|
|
229
|
+
// hex
|
|
230
|
+
'linear-gradient(180deg, #e94560 0%, #00d4ff 100%)'
|
|
231
|
+
|
|
232
|
+
// rgba —— 逗号后有无空格均可
|
|
233
|
+
'linear-gradient(180deg, rgba(233,69,96,0.8) 0%, rgba(0,212,255,0.8) 100%)'
|
|
234
|
+
'linear-gradient(180deg, rgba(233, 69, 96, 0.8) 0%, rgba(0, 212, 255, 0.8) 100%)'
|
|
235
|
+
|
|
236
|
+
// hsl/hsla
|
|
237
|
+
'linear-gradient(180deg, hsl(345, 82%, 62%) 0%, hsl(191, 100%, 50%) 100%)'
|
|
238
|
+
|
|
239
|
+
// 命名颜色
|
|
240
|
+
'linear-gradient(to top, red, blue, green)'
|
|
241
|
+
|
|
242
|
+
// transparent
|
|
243
|
+
'linear-gradient(180deg, transparent, rgba(233,69,96,0.7))'
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### 坐标格式说明
|
|
247
|
+
|
|
248
|
+
坐标参数支持多种形式:
|
|
249
|
+
|
|
250
|
+
```javascript
|
|
251
|
+
// 百分比(推荐)—— 相对于控件边界尺寸计算
|
|
252
|
+
x1: '50%' // 控件宽度的一半
|
|
253
|
+
|
|
254
|
+
// 小数(0~1)—— 自动乘以控件尺寸,效果等同于百分比
|
|
255
|
+
x1: 0.5 // 同 '50%'
|
|
256
|
+
|
|
257
|
+
// 绝对像素值
|
|
258
|
+
x1: 100 // 固定 100 像素位置
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
#### 常见错误与注意事项
|
|
262
|
+
|
|
263
|
+
<details>
|
|
264
|
+
<summary><b>点击展开常见问题</b></summary>
|
|
265
|
+
|
|
266
|
+
1. **坐标分隔符错误**:坐标格式中坐标之间用**空格**分隔,不要用逗号
|
|
267
|
+
|
|
268
|
+
```javascript
|
|
269
|
+
// 正确
|
|
270
|
+
'linear-gradient(50% 0 50% 100%, rgba(36,159,218,0) 1, rgba(36,159,218,0.8) 0)'
|
|
271
|
+
|
|
272
|
+
// 错误 - 坐标之间不能有逗号
|
|
273
|
+
'linear-gradient(50%, 0, 50%, 100%, rgba(36,159,218,0) 1, ...)'
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
2. **颜色停止点之间必须有逗号**:颜色停止点用逗号分隔
|
|
277
|
+
|
|
278
|
+
```javascript
|
|
279
|
+
// 正确
|
|
280
|
+
'linear-gradient(180deg, #e94560 0%, #00d4ff 100%)'
|
|
281
|
+
|
|
282
|
+
// 错误 - 颜色停止点之间缺少逗号
|
|
283
|
+
'linear-gradient(180deg #e94560 0% #00d4ff 100%)'
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
3. **rgba 透明度为 0 时必须写完整**:不能只写 `rgba(r,g,b, 0)` 而不写颜色值
|
|
287
|
+
|
|
288
|
+
```javascript
|
|
289
|
+
// 正确
|
|
290
|
+
'linear-gradient(50% 0 50% 100%, rgba(36,159,218,0) 1, rgba(36,159,218,0.8) 0)'
|
|
291
|
+
|
|
292
|
+
// rgba 中透明度参数是最后一个值,逗号后可以有空格
|
|
293
|
+
'rgba(36,159,218, 0)' // 正确
|
|
294
|
+
'rgba(36,159,218,0)' // 正确
|
|
295
|
+
'rgba(36, 159, 218, 0)' // 正确
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
4. **渐变至少需要 2 个颜色停止点**
|
|
299
|
+
|
|
300
|
+
```javascript
|
|
301
|
+
// 正确 - 至少 2 个颜色
|
|
302
|
+
'linear-gradient(180deg, #e94560 0%, #00d4ff 100%)'
|
|
303
|
+
|
|
304
|
+
// 错误 - 只有 1 个颜色,无法产生渐变效果
|
|
305
|
+
'linear-gradient(180deg, #e94560)'
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
5. **多行渐变字符串**:支持换行符
|
|
309
|
+
|
|
310
|
+
```javascript
|
|
311
|
+
// 正确 - 多行字符串也能正常解析
|
|
312
|
+
`linear-gradient(50% 0 50% 100%,
|
|
313
|
+
rgba(36,159,218,0) 1,
|
|
314
|
+
rgba(36,159,218,0.8) 0)`
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
6. **addStop 偏移量范围**:使用 `addStop()` 方法时,偏移量必须在 0~1 之间
|
|
318
|
+
|
|
319
|
+
```javascript
|
|
320
|
+
// 正确
|
|
321
|
+
gradient.addStop(0, '#e94560');
|
|
322
|
+
gradient.addStop(0.5, '#00d4ff');
|
|
323
|
+
gradient.addStop(1, '#8b5cf6');
|
|
324
|
+
|
|
325
|
+
// 错误 - 偏移量超出 0~1 范围会被自动裁剪并输出警告
|
|
326
|
+
gradient.addStop(1.5, '#e94560'); // 会被调整为 1
|
|
327
|
+
gradient.addStop(-0.5, '#e94560'); // 会被调整为 0
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
</details>
|
|
331
|
+
|
|
144
332
|
### filter 滤镜
|
|
145
333
|
|
|
146
334
|
支持 CSS 标准滤镜,可用值包括:
|