vislite 1.4.0 → 1.5.0-alpha.0

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 (85) hide show
  1. package/CHANGELOG +313 -307
  2. package/lib/BarLayout/index.es.js +347 -347
  3. package/lib/BarLayout/index.es.min.js +1 -1
  4. package/lib/Buffer/index.es.js +35 -35
  5. package/lib/Buffer/index.es.min.js +1 -1
  6. package/lib/Canvas/index.es.js +775 -774
  7. package/lib/Canvas/index.es.min.js +2 -2
  8. package/lib/Cardinal/index.es.js +90 -90
  9. package/lib/Cardinal/index.es.min.js +1 -1
  10. package/lib/Eoap/index.es.js +33 -33
  11. package/lib/Eoap/index.es.min.js +1 -1
  12. package/lib/Hermite/index.es.js +35 -35
  13. package/lib/Hermite/index.es.min.js +1 -1
  14. package/lib/MapCoordinate/index.es.js +199 -199
  15. package/lib/MapCoordinate/index.es.min.js +1 -1
  16. package/lib/Matrix4/index.es.js +124 -124
  17. package/lib/Matrix4/index.es.min.js +1 -1
  18. package/lib/Mercator/index.es.js +19 -19
  19. package/lib/Mercator/index.es.min.js +1 -1
  20. package/lib/PieLayout/index.es.js +114 -114
  21. package/lib/PieLayout/index.es.min.js +1 -1
  22. package/lib/RawCanvas/index.es.js +704 -704
  23. package/lib/RawCanvas/index.es.min.js +1 -1
  24. package/lib/SVG/index.es.js +514 -514
  25. package/lib/SVG/index.es.min.js +1 -1
  26. package/lib/Shader/index.es.js +35 -35
  27. package/lib/Shader/index.es.min.js +1 -1
  28. package/lib/Texture/index.es.js +53 -53
  29. package/lib/Texture/index.es.min.js +1 -1
  30. package/lib/TreeLayout/index.es.js +301 -301
  31. package/lib/TreeLayout/index.es.min.js +1 -1
  32. package/lib/animation/index.es.js +3 -3
  33. package/lib/animation/index.es.min.js +1 -1
  34. package/lib/assemble/index.es.js +17 -17
  35. package/lib/assemble/index.es.min.js +1 -1
  36. package/lib/getLoopColors/index.es.js +35 -35
  37. package/lib/getLoopColors/index.es.min.js +1 -1
  38. package/lib/getWebGLContext/index.es.js +62 -62
  39. package/lib/getWebGLContext/index.es.min.js +1 -1
  40. package/lib/index.umd.js +2657 -2656
  41. package/lib/index.umd.min.js +4 -4
  42. package/lib/initOption/index.es.js +6 -6
  43. package/lib/initOption/index.es.min.js +1 -1
  44. package/lib/mergeOption/index.es.js +34 -34
  45. package/lib/mergeOption/index.es.min.js +1 -1
  46. package/lib/move/index.es.js +7 -7
  47. package/lib/move/index.es.min.js +1 -1
  48. package/lib/rotate/index.es.js +7 -7
  49. package/lib/rotate/index.es.min.js +1 -1
  50. package/lib/ruler/index.es.js +137 -137
  51. package/lib/ruler/index.es.min.js +1 -1
  52. package/lib/scale/index.es.js +6 -6
  53. package/lib/scale/index.es.min.js +1 -1
  54. package/lib/throttle/index.es.js +1 -1
  55. package/lib/throttle/index.es.min.js +1 -1
  56. package/package/BarLayout/index.ts +2 -2
  57. package/package/PieLayout/index.ts +2 -2
  58. package/package/animation/index.ts +5 -5
  59. package/package/index.ts +84 -84
  60. package/package/throttle/index.ts +2 -2
  61. package/package.json +75 -75
  62. package/src/Canvas.ts +9 -4
  63. package/src/SVG.ts +55 -55
  64. package/src/common/canvas/gradient.ts +31 -31
  65. package/src/common/svg/default.ts +29 -29
  66. package/src/common/svg/gradient.ts +53 -53
  67. package/src/common/svg/index.ts +332 -332
  68. package/src/common/tree/toPlainTree.ts +135 -135
  69. package/src/common/webgl/texture.ts +98 -98
  70. package/src/layout/BarLayout.ts +248 -248
  71. package/src/layout/PieLayout.ts +141 -141
  72. package/src/layout/TreeLayout.ts +197 -197
  73. package/types/Bar.d.ts +91 -91
  74. package/types/BarConfig.d.ts +4 -4
  75. package/types/BarLayout.d.ts +48 -48
  76. package/types/BarOption.d.ts +31 -31
  77. package/types/CanvasOption.d.ts +5 -0
  78. package/types/Pie.d.ts +73 -73
  79. package/types/PieConfig.d.ts +26 -26
  80. package/types/PieLayout.d.ts +40 -40
  81. package/types/PieOption.d.ts +21 -21
  82. package/types/SVG.d.ts +247 -247
  83. package/types/animation.d.ts +11 -11
  84. package/types/index.d.ts +195 -195
  85. package/types/throttle.d.ts +5 -5
package/package.json CHANGED
@@ -1,75 +1,75 @@
1
- {
2
- "name": "vislite",
3
- "version": "1.4.0",
4
- "description": "灵活、快速、简单的数据可视化交互式跨端前端库",
5
- "main": "./lib/index.umd.min.js",
6
- "typings": "./types/index.d.ts",
7
- "unpkg": "./lib/index.umd.min.js",
8
- "jsdelivr": "./lib/index.umd.min.js",
9
- "sideEffects": false,
10
- "scripts": {
11
- "dev": "webpack serve --config ./build/webpack.config.js",
12
- "build": "oipage-cli disk -d ./lib && node ./build/pkg.js",
13
- "test": "karma start ./build/karma.config.js",
14
- "lint": "eslint src/**/*.ts --fix"
15
- },
16
- "miniprogram": ".",
17
- "repository": {
18
- "type": "git",
19
- "url": "git+https://github.com/oi-contrib/VISLite.git"
20
- },
21
- "keywords": [
22
- "svg",
23
- "webgl",
24
- "typescript",
25
- "canvas",
26
- "vue",
27
- "uniapp",
28
- "miniprogram",
29
- "image2d",
30
- "image3d",
31
- "oi-contrib",
32
- "vislite",
33
- "d3",
34
- "zxl20070701",
35
- "three",
36
- "echarts",
37
- "datav",
38
- "webgpu",
39
- "layout",
40
- "algorithm"
41
- ],
42
- "author": {
43
- "name": "zxl20070701",
44
- "url": "https://zxl20070701.github.io/notebook/home.html"
45
- },
46
- "license": "MIT",
47
- "bugs": {
48
- "url": "https://github.com/oi-contrib/VISLite/issues"
49
- },
50
- "homepage": "https://oi-contrib.github.io/VISLite",
51
- "devDependencies": {
52
- "@rollup/plugin-commonjs": "^25.0.7",
53
- "@rollup/plugin-node-resolve": "^15.2.3",
54
- "@rollup/plugin-typescript": "^11.1.0",
55
- "@types/jasmine": "^4.3.1",
56
- "@typescript-eslint/eslint-plugin": "^6.14.0",
57
- "@typescript-eslint/parser": "^6.14.0",
58
- "eslint": "^8.56.0",
59
- "karma": "^6.3.10",
60
- "karma-chrome-launcher": "^3.1.0",
61
- "karma-jasmine": "^4.0.1",
62
- "karma-webpack": "^5.0.0",
63
- "rollup": "^3.20.6",
64
- "terser": "^5.17.1",
65
- "ts-loader": "^9.2.8",
66
- "tslib": "^2.5.0",
67
- "typescript": "^4.6.2",
68
- "webpack": "^5.70.0",
69
- "webpack-cli": "^4.9.2",
70
- "webpack-dev-server": "^4.7.4"
71
- },
72
- "dependencies": {
73
- "oipage": "^1.3.0"
74
- }
75
- }
1
+ {
2
+ "name": "vislite",
3
+ "version": "1.5.0-alpha.0",
4
+ "description": "灵活、快速、简单的数据可视化交互式跨端前端库",
5
+ "main": "./lib/index.umd.min.js",
6
+ "typings": "./types/index.d.ts",
7
+ "unpkg": "./lib/index.umd.min.js",
8
+ "jsdelivr": "./lib/index.umd.min.js",
9
+ "sideEffects": false,
10
+ "scripts": {
11
+ "dev": "webpack serve --config ./build/webpack.config.js",
12
+ "build": "oipage-cli disk -d ./lib && node ./build/pkg.js",
13
+ "test": "karma start ./build/karma.config.js",
14
+ "lint": "eslint src/**/*.ts --fix"
15
+ },
16
+ "miniprogram": ".",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/oi-contrib/VISLite.git"
20
+ },
21
+ "keywords": [
22
+ "svg",
23
+ "webgl",
24
+ "typescript",
25
+ "canvas",
26
+ "vue",
27
+ "uniapp",
28
+ "miniprogram",
29
+ "image2d",
30
+ "image3d",
31
+ "oi-contrib",
32
+ "vislite",
33
+ "d3",
34
+ "zxl20070701",
35
+ "three",
36
+ "echarts",
37
+ "datav",
38
+ "webgpu",
39
+ "layout",
40
+ "algorithm"
41
+ ],
42
+ "author": {
43
+ "name": "zxl20070701",
44
+ "url": "https://zxl20070701.github.io/notebook/home.html"
45
+ },
46
+ "license": "MIT",
47
+ "bugs": {
48
+ "url": "https://github.com/oi-contrib/VISLite/issues"
49
+ },
50
+ "homepage": "https://oi-contrib.github.io/VISLite",
51
+ "devDependencies": {
52
+ "@rollup/plugin-commonjs": "^25.0.7",
53
+ "@rollup/plugin-node-resolve": "^15.2.3",
54
+ "@rollup/plugin-typescript": "^11.1.0",
55
+ "@types/jasmine": "^4.3.1",
56
+ "@typescript-eslint/eslint-plugin": "^6.14.0",
57
+ "@typescript-eslint/parser": "^6.14.0",
58
+ "eslint": "^8.56.0",
59
+ "karma": "^6.3.10",
60
+ "karma-chrome-launcher": "^3.1.0",
61
+ "karma-jasmine": "^4.0.1",
62
+ "karma-webpack": "^5.0.0",
63
+ "rollup": "^3.20.6",
64
+ "terser": "^5.17.1",
65
+ "ts-loader": "^9.2.8",
66
+ "tslib": "^2.5.0",
67
+ "typescript": "^4.6.2",
68
+ "webpack": "^5.70.0",
69
+ "webpack-cli": "^4.9.2",
70
+ "webpack-dev-server": "^4.7.4"
71
+ },
72
+ "dependencies": {
73
+ "oipage": "^1.3.0"
74
+ }
75
+ }
package/src/Canvas.ts CHANGED
@@ -13,6 +13,11 @@ class Canvas extends OralCanvas implements CanvasType {
13
13
  }
14
14
 
15
15
  option = initOption(option, {
16
+
17
+ // 对外暴露自定义缩放倍率(为满足特殊场景,以简化使用)
18
+ // 2025年7月25日 于秦皇岛
19
+ scale: 2,
20
+
16
21
  region: true,
17
22
  willReadFrequently: false
18
23
  })
@@ -50,20 +55,20 @@ class Canvas extends OralCanvas implements CanvasType {
50
55
  const canvas = canvasArray[index]
51
56
  if (canvas) {
52
57
  canvas.style.width = width + "px"
53
- canvas.setAttribute('width', (index * width + width) + "")
58
+ canvas.setAttribute('width', ((index === 1 ? option.scale as number : 1) * width) + "")
54
59
 
55
60
  canvas.style.height = height + "px"
56
- canvas.setAttribute('height', (index * height + height) + "")
61
+ canvas.setAttribute('height', ((index === 1 ? option.scale as number : 1) * height) + "")
57
62
  }
58
63
  }
59
64
 
60
65
  super(ViewCanvas, RegionCanvas, {
61
66
  willReadFrequently: option.willReadFrequently,
62
- }, 2)
67
+ }, option.scale)
63
68
 
64
69
  this.__canvas = ViewCanvas
65
70
  this.__el = el
66
- this.painter.scale(2, 2)
71
+ this.painter.scale(option.scale as number, option.scale as number)
67
72
  }
68
73
 
69
74
  toDataURL(): Promise<string> {
package/src/SVG.ts CHANGED
@@ -1,56 +1,56 @@
1
- import type SVGType from '../types/SVG'
2
-
3
- import OralSVG from './common/svg/index'
4
-
5
- class SVG extends OralSVG implements SVGType {
6
- private __el: HTMLElement
7
- constructor(el: HTMLElement | null) {
8
- if (!el) {
9
- throw new Error("VISLite SVG:The mount point requires an HTMLElement type but encountered null.")
10
- }
11
-
12
- const width = el.clientWidth, height = el.clientHeight
13
-
14
- const ViewSVG = document.createElementNS("http://www.w3.org/2000/svg", 'svg')
15
- el.appendChild(ViewSVG)
16
-
17
- ViewSVG.setAttribute("width", width + "")
18
- ViewSVG.setAttribute("height", height + "")
19
-
20
- ViewSVG.setAttribute("viewBox", "0 0 " + width + " " + height)
21
-
22
- super(ViewSVG)
23
-
24
- this.__el = el
25
- }
26
-
27
- toDataURL(): Promise<string> {
28
- return new Promise(resolve => {
29
- const width = this.__el.clientWidth, height = this.__el.clientHeight
30
-
31
- let img = document.createElement('img');
32
-
33
- img.setAttribute('width', width + "");
34
- img.setAttribute('height', height + "");
35
- let base64_svg = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='" + width + "' height='" + height + "'>" + this.__svg.innerHTML.replace(/"/g, "'") + "</svg>";
36
- img.setAttribute('src', base64_svg);
37
-
38
- setTimeout(function () {
39
-
40
- // 准备画布
41
- let canvas = document.createElement('canvas');
42
- canvas.setAttribute('width', width + "");
43
- canvas.setAttribute('height', height + "");
44
-
45
- let painter = canvas.getContext('2d');
46
-
47
- // 绘制截图
48
- if (painter) painter.drawImage(img, 0, 0, width, height);
49
-
50
- resolve(canvas.toDataURL());
51
- }, 100);
52
- })
53
- }
54
- }
55
-
1
+ import type SVGType from '../types/SVG'
2
+
3
+ import OralSVG from './common/svg/index'
4
+
5
+ class SVG extends OralSVG implements SVGType {
6
+ private __el: HTMLElement
7
+ constructor(el: HTMLElement | null) {
8
+ if (!el) {
9
+ throw new Error("VISLite SVG:The mount point requires an HTMLElement type but encountered null.")
10
+ }
11
+
12
+ const width = el.clientWidth, height = el.clientHeight
13
+
14
+ const ViewSVG = document.createElementNS("http://www.w3.org/2000/svg", 'svg')
15
+ el.appendChild(ViewSVG)
16
+
17
+ ViewSVG.setAttribute("width", width + "")
18
+ ViewSVG.setAttribute("height", height + "")
19
+
20
+ ViewSVG.setAttribute("viewBox", "0 0 " + width + " " + height)
21
+
22
+ super(ViewSVG)
23
+
24
+ this.__el = el
25
+ }
26
+
27
+ toDataURL(): Promise<string> {
28
+ return new Promise(resolve => {
29
+ const width = this.__el.clientWidth, height = this.__el.clientHeight
30
+
31
+ let img = document.createElement('img');
32
+
33
+ img.setAttribute('width', width + "");
34
+ img.setAttribute('height', height + "");
35
+ let base64_svg = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='" + width + "' height='" + height + "'>" + this.__svg.innerHTML.replace(/"/g, "'") + "</svg>";
36
+ img.setAttribute('src', base64_svg);
37
+
38
+ setTimeout(function () {
39
+
40
+ // 准备画布
41
+ let canvas = document.createElement('canvas');
42
+ canvas.setAttribute('width', width + "");
43
+ canvas.setAttribute('height', height + "");
44
+
45
+ let painter = canvas.getContext('2d');
46
+
47
+ // 绘制截图
48
+ if (painter) painter.drawImage(img, 0, 0, width, height);
49
+
50
+ resolve(canvas.toDataURL());
51
+ }, 100);
52
+ })
53
+ }
54
+ }
55
+
56
56
  export default SVG
@@ -1,32 +1,32 @@
1
- const enhanceGradient = function (gradient: CanvasGradient, calcStop?: Function) {
2
- const enhanceGradient = {
3
- "value": function () {
4
- return gradient
5
- },
6
- "setColor": function (stop: number, color: string) {
7
- gradient.addColorStop(calcStop ? calcStop(stop) : stop, color)
8
- return enhanceGradient
9
- }
10
- };
11
- return enhanceGradient
12
- }
13
-
14
- // 线性渐变
15
- export const linearGradient = function (painter: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) {
16
- const gradient = painter.createLinearGradient(x0, y0, x1, y1)
17
- return enhanceGradient(gradient)
18
- }
19
-
20
- // 环形渐变
21
- export const radialGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
22
- const gradient = painter.createRadialGradient(cx, cy, 0, cx, cy, r)
23
- return enhanceGradient(gradient)
24
- }
25
-
26
- // 角度渐变
27
- export const conicGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, startDeg: number, deg?: number) {
28
- const gradient = painter.createConicGradient(startDeg, cx, cy)
29
- return enhanceGradient(gradient, deg ? (stop: number) => {
30
- return deg / (Math.PI * 2) * stop
31
- } : void 0)
1
+ const enhanceGradient = function (gradient: CanvasGradient, calcStop?: Function) {
2
+ const enhanceGradient = {
3
+ "value": function () {
4
+ return gradient
5
+ },
6
+ "setColor": function (stop: number, color: string) {
7
+ gradient.addColorStop(calcStop ? calcStop(stop) : stop, color)
8
+ return enhanceGradient
9
+ }
10
+ };
11
+ return enhanceGradient
12
+ }
13
+
14
+ // 线性渐变
15
+ export const linearGradient = function (painter: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) {
16
+ const gradient = painter.createLinearGradient(x0, y0, x1, y1)
17
+ return enhanceGradient(gradient)
18
+ }
19
+
20
+ // 环形渐变
21
+ export const radialGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, r: number) {
22
+ const gradient = painter.createRadialGradient(cx, cy, 0, cx, cy, r)
23
+ return enhanceGradient(gradient)
24
+ }
25
+
26
+ // 角度渐变
27
+ export const conicGradient = function (painter: CanvasRenderingContext2D, cx: number, cy: number, startDeg: number, deg?: number) {
28
+ const gradient = painter.createConicGradient(startDeg, cx, cy)
29
+ return enhanceGradient(gradient, deg ? (stop: number) => {
30
+ return deg / (Math.PI * 2) * stop
31
+ } : void 0)
32
32
  }
@@ -1,30 +1,30 @@
1
- import type { arcCapType, textAlignType, textBaselineType, lineCapType, lineJoinType } from "../../../types/painterConfig"
2
-
3
- export default function () {
4
- return {
5
- // 颜色
6
- fillStyle: "rgb(0,0,0)",
7
- strokeStyle: "rgb(0,0,0)",
8
-
9
- // 文字对齐方式
10
- textAlign: <textAlignType>"left",
11
- textBaseline: <textBaselineType>"middle",
12
-
13
- // 文字
14
- "fontSize": 16,
15
- "fontFamily": "sans-serif",
16
-
17
- // arc二端闭合方式['butt':直线闭合,'round':圆帽闭合]
18
- "arcStartCap": <arcCapType>"butt",
19
- "arcEndCap": <arcCapType>"butt",
20
-
21
- // 线条
22
- lineDash: [],
23
- lineWidth: 1,
24
- lineCap: <lineCapType>"butt",
25
- lineJoin: <lineJoinType>"miter",
26
-
27
- // 矩形圆角半径
28
- "rectRadius": []
29
- }
1
+ import type { arcCapType, textAlignType, textBaselineType, lineCapType, lineJoinType } from "../../../types/painterConfig"
2
+
3
+ export default function () {
4
+ return {
5
+ // 颜色
6
+ fillStyle: "rgb(0,0,0)",
7
+ strokeStyle: "rgb(0,0,0)",
8
+
9
+ // 文字对齐方式
10
+ textAlign: <textAlignType>"left",
11
+ textBaseline: <textBaselineType>"middle",
12
+
13
+ // 文字
14
+ "fontSize": 16,
15
+ "fontFamily": "sans-serif",
16
+
17
+ // arc二端闭合方式['butt':直线闭合,'round':圆帽闭合]
18
+ "arcStartCap": <arcCapType>"butt",
19
+ "arcEndCap": <arcCapType>"butt",
20
+
21
+ // 线条
22
+ lineDash: [],
23
+ lineWidth: 1,
24
+ lineCap: <lineCapType>"butt",
25
+ lineJoin: <lineJoinType>"miter",
26
+
27
+ // 矩形圆角半径
28
+ "rectRadius": []
29
+ }
30
30
  }
@@ -1,53 +1,53 @@
1
- import { initDefs } from './config'
2
- import { toNode, setAttribute } from "./tool"
3
-
4
- const enhanceGradient = function (gradient: SVGElement, gradientId: string) {
5
- const enhanceGradient = {
6
- "value": function () {
7
- return "url(#" + gradientId + ")"
8
- },
9
- "setColor": function (stop: number, color: string) {
10
-
11
- const stopEl = toNode("stop")
12
- gradient.appendChild(stopEl)
13
- setAttribute(stopEl, "offset", (stop * 100) + "%")
14
- setAttribute(stopEl, "style", "stop-color:" + color + ";")
15
-
16
- return enhanceGradient
17
- }
18
- }
19
- return enhanceGradient
20
- }
21
-
22
- // 线性渐变
23
- export const linearGradient = function (el: SVGElement, x0: number, y0: number, x1: number, y1: number) {
24
-
25
- const defs = initDefs(el)
26
- const gradientId = "visliteLg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
27
-
28
- const linearGradient = toNode("linearGradient")
29
- defs.appendChild(linearGradient)
30
- setAttribute(linearGradient, "id", gradientId)
31
- setAttribute(linearGradient, "x1", x0 + "%")
32
- setAttribute(linearGradient, "y1", y0 + "%")
33
- setAttribute(linearGradient, "x2", x1 + "%")
34
- setAttribute(linearGradient, "y2", y1 + "%")
35
-
36
- return enhanceGradient(linearGradient, gradientId)
37
- }
38
-
39
- // 环形渐变
40
- export const radialGradient = function (el: SVGElement, cx: number, cy: number, r: number) {
41
-
42
- const defs = initDefs(el)
43
- const gradientId = "visliteRg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
44
-
45
- const radialGradient = toNode("radialGradient")
46
- defs.appendChild(radialGradient)
47
- setAttribute(radialGradient, "id", gradientId)
48
- setAttribute(radialGradient, "cx", cx + "%")
49
- setAttribute(radialGradient, "cy", cy + "%")
50
- setAttribute(radialGradient, "r", r + "%")
51
-
52
- return enhanceGradient(radialGradient, gradientId)
53
- }
1
+ import { initDefs } from './config'
2
+ import { toNode, setAttribute } from "./tool"
3
+
4
+ const enhanceGradient = function (gradient: SVGElement, gradientId: string) {
5
+ const enhanceGradient = {
6
+ "value": function () {
7
+ return "url(#" + gradientId + ")"
8
+ },
9
+ "setColor": function (stop: number, color: string) {
10
+
11
+ const stopEl = toNode("stop")
12
+ gradient.appendChild(stopEl)
13
+ setAttribute(stopEl, "offset", (stop * 100) + "%")
14
+ setAttribute(stopEl, "style", "stop-color:" + color + ";")
15
+
16
+ return enhanceGradient
17
+ }
18
+ }
19
+ return enhanceGradient
20
+ }
21
+
22
+ // 线性渐变
23
+ export const linearGradient = function (el: SVGElement, x0: number, y0: number, x1: number, y1: number) {
24
+
25
+ const defs = initDefs(el)
26
+ const gradientId = "visliteLg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
27
+
28
+ const linearGradient = toNode("linearGradient")
29
+ defs.appendChild(linearGradient)
30
+ setAttribute(linearGradient, "id", gradientId)
31
+ setAttribute(linearGradient, "x1", x0 + "%")
32
+ setAttribute(linearGradient, "y1", y0 + "%")
33
+ setAttribute(linearGradient, "x2", x1 + "%")
34
+ setAttribute(linearGradient, "y2", y1 + "%")
35
+
36
+ return enhanceGradient(linearGradient, gradientId)
37
+ }
38
+
39
+ // 环形渐变
40
+ export const radialGradient = function (el: SVGElement, cx: number, cy: number, r: number) {
41
+
42
+ const defs = initDefs(el)
43
+ const gradientId = "visliteRg" + new Date().valueOf() + "" + (Math.random() * 1000000).toFixed(0)
44
+
45
+ const radialGradient = toNode("radialGradient")
46
+ defs.appendChild(radialGradient)
47
+ setAttribute(radialGradient, "id", gradientId)
48
+ setAttribute(radialGradient, "cx", cx + "%")
49
+ setAttribute(radialGradient, "cy", cy + "%")
50
+ setAttribute(radialGradient, "r", r + "%")
51
+
52
+ return enhanceGradient(radialGradient, gradientId)
53
+ }