vislite 1.12.0 → 1.12.1

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 (179) hide show
  1. package/AUTHORS.txt +6 -6
  2. package/CHANGELOG +408 -403
  3. package/LICENSE +20 -20
  4. package/README-en.md +245 -245
  5. package/README.md +245 -245
  6. package/bin/formatArgv.js +30 -30
  7. package/bin/help.js +17 -17
  8. package/bin/run +21 -21
  9. package/bin/skills.js +26 -26
  10. package/lib/BarLayout/index.es.js +348 -348
  11. package/lib/Buffer/index.es.js +34 -34
  12. package/lib/Canvas/index.es.js +804 -804
  13. package/lib/Cardinal/index.es.js +89 -89
  14. package/lib/Eoap/index.es.js +32 -32
  15. package/lib/Hermite/index.es.js +34 -34
  16. package/lib/MapCoordinate/index.es.js +199 -199
  17. package/lib/Matrix4/index.es.js +123 -123
  18. package/lib/Mercator/index.es.js +18 -18
  19. package/lib/PieLayout/index.es.js +115 -115
  20. package/lib/RawCanvas/index.es.js +736 -736
  21. package/lib/SVG/index.es.js +626 -626
  22. package/lib/Shader/index.es.js +34 -34
  23. package/lib/Texture/index.es.js +52 -52
  24. package/lib/TreeLayout/index.es.js +301 -301
  25. package/lib/animation/index.es.js +2 -2
  26. package/lib/assemble/index.es.js +19 -19
  27. package/lib/getLoopColors/index.es.js +34 -34
  28. package/lib/getWebGLContext/index.es.js +61 -61
  29. package/lib/index.umd.js +2797 -2797
  30. package/lib/index.umd.min.js +1 -1
  31. package/lib/initOption/index.es.js +5 -5
  32. package/lib/mergeOption/index.es.js +34 -34
  33. package/lib/move/index.es.js +6 -6
  34. package/lib/rotate/index.es.js +6 -6
  35. package/lib/ruler/index.es.js +136 -136
  36. package/lib/scale/index.es.js +5 -5
  37. package/minialipay/ui-canvas/drawImage.js +35 -35
  38. package/minialipay/ui-canvas/index.acss +4 -4
  39. package/minialipay/ui-canvas/index.axml +3 -3
  40. package/minialipay/ui-canvas/index.d.ts +1 -1
  41. package/minialipay/ui-canvas/index.js +100 -100
  42. package/minialipay/ui-canvas/index.json +6 -6
  43. package/miniprogram/ui-canvas/drawImage.js +35 -35
  44. package/miniprogram/ui-canvas/index.js +125 -125
  45. package/miniprogram/ui-canvas/index.json +4 -4
  46. package/miniprogram/ui-canvas/index.wxml +4 -4
  47. package/miniprogram/ui-canvas/index.wxss +5 -5
  48. package/package/BarLayout/index.ts +2 -2
  49. package/package/Buffer/index.ts +2 -2
  50. package/package/Canvas/index.ts +2 -2
  51. package/package/Cardinal/index.ts +2 -2
  52. package/package/Eoap/index.ts +2 -2
  53. package/package/Hermite/index.ts +2 -2
  54. package/package/MapCoordinate/index.ts +2 -2
  55. package/package/Matrix4/index.ts +2 -2
  56. package/package/Mercator/index.ts +2 -2
  57. package/package/PieLayout/index.ts +2 -2
  58. package/package/RawCanvas/index.ts +2 -2
  59. package/package/SVG/index.ts +2 -2
  60. package/package/Shader/index.ts +2 -2
  61. package/package/Texture/index.ts +2 -2
  62. package/package/TreeLayout/index.ts +2 -2
  63. package/package/animation/index.ts +5 -5
  64. package/package/assemble/index.ts +2 -2
  65. package/package/getLoopColors/index.ts +2 -2
  66. package/package/getWebGLContext/index.ts +40 -40
  67. package/package/index.ts +84 -84
  68. package/package/initOption/index.ts +2 -2
  69. package/package/mergeOption/index.ts +2 -2
  70. package/package/move/index.ts +2 -2
  71. package/package/rotate/index.ts +2 -2
  72. package/package/ruler/index.ts +2 -2
  73. package/package/scale/index.ts +2 -2
  74. package/package/throttle/index.ts +2 -2
  75. package/package.json +79 -79
  76. package/skills/vislite-lib/BarLayout.md +117 -117
  77. package/skills/vislite-lib/Canvas.md +183 -183
  78. package/skills/vislite-lib/Interpolation.md +129 -129
  79. package/skills/vislite-lib/Matrix.md +174 -174
  80. package/skills/vislite-lib/PieLayout.md +131 -131
  81. package/skills/vislite-lib/Projections.md +158 -158
  82. package/skills/vislite-lib/SKILL.md +179 -179
  83. package/skills/vislite-lib/SVG.md +137 -137
  84. package/skills/vislite-lib/TreeLayout.md +176 -176
  85. package/skills/vislite-lib/Utilities.md +261 -261
  86. package/skills/vislite-lib/WebGL.md +106 -106
  87. package/skills/vislite-lib/minialipay/ui-canvas.md +95 -95
  88. package/skills/vislite-lib/miniprogram/ui-canvas.md +98 -98
  89. package/skills/vislite-lib/uniapp/ui-canvas.md +113 -113
  90. package/src/Canvas.ts +89 -89
  91. package/src/Eoap.ts +66 -66
  92. package/src/Matrix4/index.ts +84 -84
  93. package/src/Matrix4/move.ts +12 -12
  94. package/src/Matrix4/rotate.ts +15 -15
  95. package/src/Matrix4/scale.ts +11 -11
  96. package/src/Matrix4/transform.ts +64 -64
  97. package/src/Mercator.ts +27 -27
  98. package/src/SVG.ts +86 -86
  99. package/src/common/assemble.ts +30 -30
  100. package/src/common/canvas/arc.ts +51 -51
  101. package/src/common/canvas/config.ts +176 -176
  102. package/src/common/canvas/default.ts +64 -64
  103. package/src/common/canvas/gradient.ts +31 -31
  104. package/src/common/canvas/index.ts +189 -189
  105. package/src/common/canvas/painter.ts +475 -475
  106. package/src/common/canvas/texts.ts +18 -18
  107. package/src/common/map/getBoundary.ts +15 -15
  108. package/src/common/map/tool.ts +29 -29
  109. package/src/common/option.ts +31 -31
  110. package/src/common/setStyle.ts +5 -5
  111. package/src/common/svg/config.ts +213 -213
  112. package/src/common/svg/default.ts +29 -29
  113. package/src/common/svg/gradient.ts +53 -53
  114. package/src/common/svg/index.ts +420 -420
  115. package/src/common/svg/tool.ts +51 -51
  116. package/src/common/tree/index.ts +25 -25
  117. package/src/common/tree/toInnerTree.ts +61 -61
  118. package/src/common/tree/toPlainTree.ts +135 -135
  119. package/src/common/type.ts +26 -26
  120. package/src/common/webgl/buffer.ts +79 -79
  121. package/src/common/webgl/getWebGLContext.ts +45 -45
  122. package/src/common/webgl/shader.ts +75 -75
  123. package/src/common/webgl/texture.ts +98 -98
  124. package/src/coordinate/MapCoordinate.ts +80 -80
  125. package/src/getLoopColors.ts +42 -42
  126. package/src/interpolation/Cardinal.ts +110 -110
  127. package/src/interpolation/Hermite.ts +65 -65
  128. package/src/layout/BarLayout.ts +249 -249
  129. package/src/layout/PieLayout.ts +146 -146
  130. package/src/layout/TreeLayout.ts +200 -200
  131. package/src/move.ts +7 -7
  132. package/src/rotate.ts +7 -7
  133. package/src/ruler.ts +209 -209
  134. package/src/scale.ts +6 -6
  135. package/types/Bar.d.ts +91 -91
  136. package/types/BarConfig.d.ts +4 -4
  137. package/types/BarLayout.d.ts +48 -48
  138. package/types/BarOption.d.ts +31 -31
  139. package/types/Buffer.d.ts +30 -30
  140. package/types/Canvas.d.ts +379 -379
  141. package/types/CanvasConfig.d.ts +61 -61
  142. package/types/CanvasOption.d.ts +13 -13
  143. package/types/CanvasOpts.d.ts +9 -9
  144. package/types/Cardinal.d.ts +20 -20
  145. package/types/Gradient.d.ts +20 -20
  146. package/types/Hermite.d.ts +25 -25
  147. package/types/Map.d.ts +9 -9
  148. package/types/MapConfig.d.ts +27 -27
  149. package/types/MapCoordinate.d.ts +22 -22
  150. package/types/Matrix4.d.ts +79 -79
  151. package/types/Pie.d.ts +73 -73
  152. package/types/PieConfig.d.ts +26 -26
  153. package/types/PieLayout.d.ts +40 -40
  154. package/types/PieOption.d.ts +21 -21
  155. package/types/SVG.d.ts +282 -282
  156. package/types/SVGConfig.d.ts +54 -54
  157. package/types/Shader.d.ts +22 -22
  158. package/types/Texture.d.ts +22 -22
  159. package/types/Tree.d.ts +74 -74
  160. package/types/TreeConfig.d.ts +52 -52
  161. package/types/TreeLayout.d.ts +71 -71
  162. package/types/TreeOption.d.ts +48 -48
  163. package/types/animation.d.ts +26 -26
  164. package/types/assemble.d.ts +14 -14
  165. package/types/getLoopColors.d.ts +13 -13
  166. package/types/getWebGLContext.d.ts +7 -7
  167. package/types/index.d.ts +220 -220
  168. package/types/module.d.ts +110 -110
  169. package/types/move.d.ts +15 -15
  170. package/types/option.d.ts +12 -12
  171. package/types/painterConfig.d.ts +14 -14
  172. package/types/rotate.d.ts +15 -15
  173. package/types/ruler.d.ts +24 -24
  174. package/types/scale.d.ts +15 -15
  175. package/types/throttle.d.ts +6 -6
  176. package/types/ui-canvas.d.ts +4 -4
  177. package/types/uni-canvas.d.ts +3 -3
  178. package/uni-app/drawImage.js +19 -19
  179. package/uni-app/ui-canvas.vue +295 -295
@@ -1,118 +1,118 @@
1
- # BarLayout 柱状图布局
2
-
3
- BarLayout 用于绘制柱状图/条形图。
4
-
5
- ## 引入
6
-
7
- ```js
8
- import { BarLayout } from 'vislite';
9
- ```
10
-
11
- ## 初始化
12
-
13
- ```js
14
- var barLayout = new BarLayout();
15
- ```
16
-
17
- ## setOption 设置布局行为
18
-
19
- ```js
20
- barLayout.setOption({
21
- x: 50, // 左上角x坐标
22
- y: 350, // 左上角y坐标
23
- width: 400, // 宽度
24
- height: 300, // 高度
25
- category: 'xAxis', // 分类轴:xAxis|yAxis
26
- duration: 200 // 动画时长(ms)
27
- });
28
- ```
29
-
30
- ### category 方向
31
-
32
- - **xAxis**: 分类在x轴,柱状图从下往上
33
- - **yAxis**: 分类在y轴,条形图从左往右
34
-
35
- ## use 坐标计算
36
-
37
- ### 一维数据
38
-
39
- ```js
40
- var data = {
41
- category: ['HTML', 'CSS', 'JS'],
42
- data: [30, 20, 50]
43
- };
44
- var bar = barLayout.use(data);
45
- ```
46
-
47
- ### 二维数据(分组柱状图)
48
-
49
- ```js
50
- var data = {
51
- category: ['HTML', 'CSS', 'JS'],
52
- value: [
53
- { name: '男生', data: [30, 20, 50] },
54
- { name: '女生', data: [25, 30, 40] }
55
- ]
56
- };
57
- var bar = barLayout.use(data);
58
- ```
59
-
60
- ### 返回值 bar 结构
61
-
62
- ```js
63
- {
64
- coordinate: {
65
- x, y, width, height, // 坐标系位置
66
- xAxis: { type: 'category' | 'value', data: [...] },
67
- yAxis: { type: 'category' | 'value', data: [...] }
68
- },
69
- node: [
70
- {
71
- name: '分组名称', // 分组柱状图时有效
72
- bar: [
73
- {
74
- x, y, width, height, // 矩形位置
75
- value: 数值
76
- }
77
- ]
78
- }
79
- ]
80
- }
81
- ```
82
-
83
- ## 使用示例
84
-
85
- ```js
86
- var barLayout = new BarLayout();
87
-
88
- barLayout.setOption({
89
- x: 50,
90
- y: 350,
91
- width: 400,
92
- height: 300,
93
- category: 'xAxis'
94
- });
95
-
96
- var data = {
97
- category: ['HTML', 'CSS', 'JavaScript'],
98
- data: [30, 20, 50]
99
- };
100
-
101
- var bar = barLayout.use(data);
102
-
103
- // 绘制坐标系
104
- painter.config({ strokeStyle: 'black' })
105
- .beginPath()
106
- .moveTo(bar.coordinate.x, bar.coordinate.y)
107
- .lineTo(bar.coordinate.x + bar.coordinate.width, bar.coordinate.y)
108
- .lineTo(bar.coordinate.x + bar.coordinate.width, bar.coordinate.y - bar.coordinate.height)
109
- .stroke();
110
-
111
- // 绘制柱状图
112
- var colors = ['red', 'green', 'blue'];
113
- for (var i = 0; i < bar.node[0].bar.length; i++) {
114
- var rect = bar.node[0].bar[i];
115
- painter.config({ fillStyle: colors[i] })
116
- .fillRect(rect.x, rect.y, rect.width, rect.height);
117
- }
1
+ # BarLayout 柱状图布局
2
+
3
+ BarLayout 用于绘制柱状图/条形图。
4
+
5
+ ## 引入
6
+
7
+ ```js
8
+ import { BarLayout } from 'vislite';
9
+ ```
10
+
11
+ ## 初始化
12
+
13
+ ```js
14
+ var barLayout = new BarLayout();
15
+ ```
16
+
17
+ ## setOption 设置布局行为
18
+
19
+ ```js
20
+ barLayout.setOption({
21
+ x: 50, // 左上角x坐标
22
+ y: 350, // 左上角y坐标
23
+ width: 400, // 宽度
24
+ height: 300, // 高度
25
+ category: 'xAxis', // 分类轴:xAxis|yAxis
26
+ duration: 200 // 动画时长(ms)
27
+ });
28
+ ```
29
+
30
+ ### category 方向
31
+
32
+ - **xAxis**: 分类在x轴,柱状图从下往上
33
+ - **yAxis**: 分类在y轴,条形图从左往右
34
+
35
+ ## use 坐标计算
36
+
37
+ ### 一维数据
38
+
39
+ ```js
40
+ var data = {
41
+ category: ['HTML', 'CSS', 'JS'],
42
+ data: [30, 20, 50]
43
+ };
44
+ var bar = barLayout.use(data);
45
+ ```
46
+
47
+ ### 二维数据(分组柱状图)
48
+
49
+ ```js
50
+ var data = {
51
+ category: ['HTML', 'CSS', 'JS'],
52
+ value: [
53
+ { name: '男生', data: [30, 20, 50] },
54
+ { name: '女生', data: [25, 30, 40] }
55
+ ]
56
+ };
57
+ var bar = barLayout.use(data);
58
+ ```
59
+
60
+ ### 返回值 bar 结构
61
+
62
+ ```js
63
+ {
64
+ coordinate: {
65
+ x, y, width, height, // 坐标系位置
66
+ xAxis: { type: 'category' | 'value', data: [...] },
67
+ yAxis: { type: 'category' | 'value', data: [...] }
68
+ },
69
+ node: [
70
+ {
71
+ name: '分组名称', // 分组柱状图时有效
72
+ bar: [
73
+ {
74
+ x, y, width, height, // 矩形位置
75
+ value: 数值
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+ }
81
+ ```
82
+
83
+ ## 使用示例
84
+
85
+ ```js
86
+ var barLayout = new BarLayout();
87
+
88
+ barLayout.setOption({
89
+ x: 50,
90
+ y: 350,
91
+ width: 400,
92
+ height: 300,
93
+ category: 'xAxis'
94
+ });
95
+
96
+ var data = {
97
+ category: ['HTML', 'CSS', 'JavaScript'],
98
+ data: [30, 20, 50]
99
+ };
100
+
101
+ var bar = barLayout.use(data);
102
+
103
+ // 绘制坐标系
104
+ painter.config({ strokeStyle: 'black' })
105
+ .beginPath()
106
+ .moveTo(bar.coordinate.x, bar.coordinate.y)
107
+ .lineTo(bar.coordinate.x + bar.coordinate.width, bar.coordinate.y)
108
+ .lineTo(bar.coordinate.x + bar.coordinate.width, bar.coordinate.y - bar.coordinate.height)
109
+ .stroke();
110
+
111
+ // 绘制柱状图
112
+ var colors = ['red', 'green', 'blue'];
113
+ for (var i = 0; i < bar.node[0].bar.length; i++) {
114
+ var rect = bar.node[0].bar[i];
115
+ painter.config({ fillStyle: colors[i] })
116
+ .fillRect(rect.x, rect.y, rect.width, rect.height);
117
+ }
118
118
  ```
@@ -1,184 +1,184 @@
1
- # Canvas 画笔 API
2
-
3
- Canvas 是 VISLite 的核心画笔之一,**绘制 API 完全一致**,但初始化方式因平台而异。
4
-
5
- ## 平台初始化方式
6
-
7
- ### H5 端
8
-
9
- ```js
10
- import { Canvas } from 'vislite';
11
-
12
- var painter = new Canvas(document.getElementById('root'), {
13
- scale: 2, // 缩放倍率,默认2
14
- region: true, // 是否启用区域检测,默认true
15
- willReadFrequently: false
16
- }, width, height);
17
- ```
18
-
19
- ### 微信/支付宝小程序
20
-
21
- 小程序端需要使用 ui-canvas 组件,详见:
22
- - [微信小程序 Canvas](miniprogram/ui-canvas.md)
23
- - [支付宝小程序 Canvas](minialipay/ui-canvas.md)
24
-
25
- ### uni-app
26
-
27
- uni-app 根据编译目标平台选择上述方式,详见:
28
- - [uni-app Canvas](uniapp/ui-canvas.md)
29
-
30
- ## 配置项 (config)
31
-
32
- ```js
33
- painter.config({
34
- fillStyle: 'red', // 填充色
35
- strokeStyle: 'black', // 轮廓色
36
- lineWidth: 1, // 线宽
37
- lineCap: 'butt', // 线端点类型:butt|round|square
38
- lineJoin: 'miter', // 线拐角:miter|bevel|round
39
- lineDash: [], // 虚线样式
40
- textAlign: 'left', // 文字水平对齐:left|center|right
41
- textBaseline: 'middle', // 文字垂直对齐:middle|top|bottom
42
- shadowBlur: 0, // 阴影模糊
43
- shadowColor: 'black', // 阴影颜色
44
- fontSize: 16, // 字体大小
45
- fontFamily: 'sans-serif', // 字体
46
- fontWeight: 400, // 字重
47
- fontStyle: 'normal', // 字类型
48
- arcStartCap: 'butt', // 圆弧开始端闭合:butt|round|-round
49
- arcEndCap: 'butt', // 圆弧结束端闭合
50
- rectRadius: [10, 10, 10, 10] // 矩形圆角
51
- });
52
- ```
53
-
54
- ### 渐变色
55
-
56
- ```js
57
- // 线性渐变
58
- var gradient = painter.createLinearGradient(x1, y1, x2, y2);
59
- gradient.setColor(0, 'red').setColor(1, 'blue');
60
- painter.config({ fillStyle: gradient.value() });
61
-
62
- // 环形渐变
63
- var gradient = painter.createRadialGradient(cx, cy, r1, r2);
64
- gradient.setColor(0, 'red').setColor(1, 'blue');
65
-
66
- // 角度渐变 (1.2.0+)
67
- var gradient = painter.createConicGradient(cx, cy, beginDeg, deg);
68
- gradient.setColor(0, 'red').setColor(1, 'blue');
69
- ```
70
-
71
- ## 文字绘制
72
-
73
- ```js
74
- painter.fillText(text, x, y, deg); // 填充文字
75
- painter.strokeText(text, x, y, deg); // 轮廓文字
76
- painter.fullText(text, x, y, deg); // 填充+轮廓文字
77
-
78
- // 多行文字
79
- painter.fillTexts(contents, x, y, width, lineHeight, deg);
80
- painter.strokeTexts(contents, x, y, width, lineHeight, deg);
81
- painter.fullTexts(contents, x, y, width, lineHeight, deg);
82
-
83
- // 计算文字宽度
84
- painter.textWidth(text);
85
- ```
86
-
87
- ## 路径操作
88
-
89
- ```js
90
- painter.beginPath(); // 开始路径
91
- painter.closePath(); // 闭合路径
92
- painter.moveTo(x, y); // 移动起点
93
- painter.lineTo(x, y); // 画线
94
- painter.arc(x, y, r, beginDeg, deg); // 圆弧
95
- painter.quadraticCurveTo(cpx, cpy, x, y); // 二次贝塞尔
96
- painter.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); // 三次贝塞尔
97
- painter.fill(); // 填充
98
- painter.stroke(); // 描边
99
- painter.full(); // 填充+描边
100
- painter.clip(); // 裁剪
101
- ```
102
-
103
- ## 画布操作
104
-
105
- ```js
106
- painter.save(); // 保存状态
107
- painter.restore(); // 恢复状态
108
- painter.clearRect(x, y, w, h); // 清除矩形区域
109
- painter.clearCircle(cx, cy, r); // 清除圆形区域
110
-
111
- // 缩放
112
- painter.scale(x, y);
113
-
114
- // 获取画布信息
115
- painter.getInfo(); // { width, height }
116
-
117
- // 获取原始画布上下文
118
- painter.getContext(); // CanvasRenderingContext2D
119
- ```
120
-
121
- ## 区域交互
122
-
123
- ```js
124
- // 设置当前绑定的区域名称
125
- painter.setRegion('regionName');
126
-
127
- // 获取点击所在的区域名称
128
- painter.getRegion(x, y).then(regionName => {
129
- console.log(regionName);
130
- });
131
-
132
- // 绑定点击事件
133
- painter.bind('click', (regionName, x, y) => {
134
- console.log(regionName, x, y);
135
- });
136
-
137
- // 只绘制区域(用于交互检测)
138
- painter.onlyRegion(true);
139
-
140
- // 只绘制视图
141
- painter.onlyView(true);
142
- ```
143
-
144
- ## 图形绘制(便捷方法)
145
-
146
- ```js
147
- // 圆
148
- painter.fillCircle(x, y, r); // 填充圆
149
- painter.strokeCircle(x, y, r); // 描边圆
150
- painter.fullCircle(x, y, r); // 填充+描边圆
151
-
152
- // 矩形
153
- painter.fillRect(x, y, w, h);
154
- painter.strokeRect(x, y, w, h);
155
- painter.fullRect(x, y, w, h);
156
-
157
- // 圆环 (1.1.0+)
158
- painter.fillRing(x, y, r1, r2);
159
- painter.strokeRing(x, y, r1, r2);
160
- painter.fullRing(x, y, r1, r2);
161
-
162
- // 椭圆 (1.1.0+)
163
- painter.fillEllipse(x, y, r1, r2, deg);
164
- painter.strokeEllipse(x, y, r1, r2, deg);
165
- ```
166
-
167
- ## 导出
168
-
169
- ```js
170
- // 导出为图片
171
- painter.toDataURL(type, encoderOptions).then(dataUrl => {
172
- // dataUrl 即为 base64 图片
173
- });
174
- ```
175
-
176
- ## 重置
177
-
178
- ```js
179
- // 重置为默认配置
180
- painter.reset();
181
-
182
- // 带自定义配置重置
183
- painter.reset({ fillStyle: 'blue', fontSize: 20 });
1
+ # Canvas 画笔 API
2
+
3
+ Canvas 是 VISLite 的核心画笔之一,**绘制 API 完全一致**,但初始化方式因平台而异。
4
+
5
+ ## 平台初始化方式
6
+
7
+ ### H5 端
8
+
9
+ ```js
10
+ import { Canvas } from 'vislite';
11
+
12
+ var painter = new Canvas(document.getElementById('root'), {
13
+ scale: 2, // 缩放倍率,默认2
14
+ region: true, // 是否启用区域检测,默认true
15
+ willReadFrequently: false
16
+ }, width, height);
17
+ ```
18
+
19
+ ### 微信/支付宝小程序
20
+
21
+ 小程序端需要使用 ui-canvas 组件,详见:
22
+ - [微信小程序 Canvas](miniprogram/ui-canvas.md)
23
+ - [支付宝小程序 Canvas](minialipay/ui-canvas.md)
24
+
25
+ ### uni-app
26
+
27
+ uni-app 根据编译目标平台选择上述方式,详见:
28
+ - [uni-app Canvas](uniapp/ui-canvas.md)
29
+
30
+ ## 配置项 (config)
31
+
32
+ ```js
33
+ painter.config({
34
+ fillStyle: 'red', // 填充色
35
+ strokeStyle: 'black', // 轮廓色
36
+ lineWidth: 1, // 线宽
37
+ lineCap: 'butt', // 线端点类型:butt|round|square
38
+ lineJoin: 'miter', // 线拐角:miter|bevel|round
39
+ lineDash: [], // 虚线样式
40
+ textAlign: 'left', // 文字水平对齐:left|center|right
41
+ textBaseline: 'middle', // 文字垂直对齐:middle|top|bottom
42
+ shadowBlur: 0, // 阴影模糊
43
+ shadowColor: 'black', // 阴影颜色
44
+ fontSize: 16, // 字体大小
45
+ fontFamily: 'sans-serif', // 字体
46
+ fontWeight: 400, // 字重
47
+ fontStyle: 'normal', // 字类型
48
+ arcStartCap: 'butt', // 圆弧开始端闭合:butt|round|-round
49
+ arcEndCap: 'butt', // 圆弧结束端闭合
50
+ rectRadius: [10, 10, 10, 10] // 矩形圆角
51
+ });
52
+ ```
53
+
54
+ ### 渐变色
55
+
56
+ ```js
57
+ // 线性渐变
58
+ var gradient = painter.createLinearGradient(x1, y1, x2, y2);
59
+ gradient.setColor(0, 'red').setColor(1, 'blue');
60
+ painter.config({ fillStyle: gradient.value() });
61
+
62
+ // 环形渐变
63
+ var gradient = painter.createRadialGradient(cx, cy, r1, r2);
64
+ gradient.setColor(0, 'red').setColor(1, 'blue');
65
+
66
+ // 角度渐变 (1.2.0+)
67
+ var gradient = painter.createConicGradient(cx, cy, beginDeg, deg);
68
+ gradient.setColor(0, 'red').setColor(1, 'blue');
69
+ ```
70
+
71
+ ## 文字绘制
72
+
73
+ ```js
74
+ painter.fillText(text, x, y, deg); // 填充文字
75
+ painter.strokeText(text, x, y, deg); // 轮廓文字
76
+ painter.fullText(text, x, y, deg); // 填充+轮廓文字
77
+
78
+ // 多行文字
79
+ painter.fillTexts(contents, x, y, width, lineHeight, deg);
80
+ painter.strokeTexts(contents, x, y, width, lineHeight, deg);
81
+ painter.fullTexts(contents, x, y, width, lineHeight, deg);
82
+
83
+ // 计算文字宽度
84
+ painter.textWidth(text);
85
+ ```
86
+
87
+ ## 路径操作
88
+
89
+ ```js
90
+ painter.beginPath(); // 开始路径
91
+ painter.closePath(); // 闭合路径
92
+ painter.moveTo(x, y); // 移动起点
93
+ painter.lineTo(x, y); // 画线
94
+ painter.arc(x, y, r, beginDeg, deg); // 圆弧
95
+ painter.quadraticCurveTo(cpx, cpy, x, y); // 二次贝塞尔
96
+ painter.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); // 三次贝塞尔
97
+ painter.fill(); // 填充
98
+ painter.stroke(); // 描边
99
+ painter.full(); // 填充+描边
100
+ painter.clip(); // 裁剪
101
+ ```
102
+
103
+ ## 画布操作
104
+
105
+ ```js
106
+ painter.save(); // 保存状态
107
+ painter.restore(); // 恢复状态
108
+ painter.clearRect(x, y, w, h); // 清除矩形区域
109
+ painter.clearCircle(cx, cy, r); // 清除圆形区域
110
+
111
+ // 缩放
112
+ painter.scale(x, y);
113
+
114
+ // 获取画布信息
115
+ painter.getInfo(); // { width, height }
116
+
117
+ // 获取原始画布上下文
118
+ painter.getContext(); // CanvasRenderingContext2D
119
+ ```
120
+
121
+ ## 区域交互
122
+
123
+ ```js
124
+ // 设置当前绑定的区域名称
125
+ painter.setRegion('regionName');
126
+
127
+ // 获取点击所在的区域名称
128
+ painter.getRegion(x, y).then(regionName => {
129
+ console.log(regionName);
130
+ });
131
+
132
+ // 绑定点击事件
133
+ painter.bind('click', (regionName, x, y) => {
134
+ console.log(regionName, x, y);
135
+ });
136
+
137
+ // 只绘制区域(用于交互检测)
138
+ painter.onlyRegion(true);
139
+
140
+ // 只绘制视图
141
+ painter.onlyView(true);
142
+ ```
143
+
144
+ ## 图形绘制(便捷方法)
145
+
146
+ ```js
147
+ // 圆
148
+ painter.fillCircle(x, y, r); // 填充圆
149
+ painter.strokeCircle(x, y, r); // 描边圆
150
+ painter.fullCircle(x, y, r); // 填充+描边圆
151
+
152
+ // 矩形
153
+ painter.fillRect(x, y, w, h);
154
+ painter.strokeRect(x, y, w, h);
155
+ painter.fullRect(x, y, w, h);
156
+
157
+ // 圆环 (1.1.0+)
158
+ painter.fillRing(x, y, r1, r2);
159
+ painter.strokeRing(x, y, r1, r2);
160
+ painter.fullRing(x, y, r1, r2);
161
+
162
+ // 椭圆 (1.1.0+)
163
+ painter.fillEllipse(x, y, r1, r2, deg);
164
+ painter.strokeEllipse(x, y, r1, r2, deg);
165
+ ```
166
+
167
+ ## 导出
168
+
169
+ ```js
170
+ // 导出为图片
171
+ painter.toDataURL(type, encoderOptions).then(dataUrl => {
172
+ // dataUrl 即为 base64 图片
173
+ });
174
+ ```
175
+
176
+ ## 重置
177
+
178
+ ```js
179
+ // 重置为默认配置
180
+ painter.reset();
181
+
182
+ // 带自定义配置重置
183
+ painter.reset({ fillStyle: 'blue', fontSize: 20 });
184
184
  ```