@spcsn/taro 0.1.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 (140) hide show
  1. package/README.md +12 -0
  2. package/dist/index.js +147 -0
  3. package/dist/index.js.map +1 -0
  4. package/index.js +9 -0
  5. package/package.json +86 -0
  6. package/types/api/ad/index.d.ts +197 -0
  7. package/types/api/ai/face.d.ts +133 -0
  8. package/types/api/ai/inference.d.ts +129 -0
  9. package/types/api/ai/visionkit.d.ts +874 -0
  10. package/types/api/alipay/index.d.ts +69 -0
  11. package/types/api/base/crypto.d.ts +104 -0
  12. package/types/api/base/debug.d.ts +329 -0
  13. package/types/api/base/env.d.ts +19 -0
  14. package/types/api/base/index.d.ts +102 -0
  15. package/types/api/base/performance.d.ts +258 -0
  16. package/types/api/base/system.d.ts +742 -0
  17. package/types/api/base/update.d.ts +130 -0
  18. package/types/api/base/weapp/app-event.d.ts +265 -0
  19. package/types/api/base/weapp/life-cycle.d.ts +155 -0
  20. package/types/api/canvas/index.d.ts +2162 -0
  21. package/types/api/cloud/index.d.ts +2622 -0
  22. package/types/api/data-analysis/index.d.ts +122 -0
  23. package/types/api/device/accelerometer.d.ts +102 -0
  24. package/types/api/device/accessibility.d.ts +26 -0
  25. package/types/api/device/battery.d.ts +46 -0
  26. package/types/api/device/bluetooth-ble.d.ts +601 -0
  27. package/types/api/device/bluetooth-peripheral.d.ts +430 -0
  28. package/types/api/device/bluetooth.d.ts +463 -0
  29. package/types/api/device/calendar.d.ts +98 -0
  30. package/types/api/device/clipboard.d.ts +81 -0
  31. package/types/api/device/compass.d.ts +105 -0
  32. package/types/api/device/contact.d.ts +110 -0
  33. package/types/api/device/gyroscope.d.ts +85 -0
  34. package/types/api/device/iBeacon.d.ts +168 -0
  35. package/types/api/device/keyboard.d.ts +97 -0
  36. package/types/api/device/memory.d.ts +52 -0
  37. package/types/api/device/motion.d.ts +88 -0
  38. package/types/api/device/network.d.ts +172 -0
  39. package/types/api/device/nfc.d.ts +1238 -0
  40. package/types/api/device/phone.d.ts +30 -0
  41. package/types/api/device/scan.d.ts +111 -0
  42. package/types/api/device/screen.d.ts +217 -0
  43. package/types/api/device/sms.d.ts +26 -0
  44. package/types/api/device/vibrate.d.ts +51 -0
  45. package/types/api/device/wifi.d.ts +301 -0
  46. package/types/api/ext/index.d.ts +64 -0
  47. package/types/api/files/index.d.ts +1472 -0
  48. package/types/api/framework/index.d.ts +51 -0
  49. package/types/api/location/index.d.ts +517 -0
  50. package/types/api/media/audio.d.ts +1013 -0
  51. package/types/api/media/background-audio.d.ts +291 -0
  52. package/types/api/media/camera.d.ts +207 -0
  53. package/types/api/media/editor.d.ts +239 -0
  54. package/types/api/media/image.d.ts +469 -0
  55. package/types/api/media/live.d.ts +461 -0
  56. package/types/api/media/map.d.ts +638 -0
  57. package/types/api/media/media-recorder.d.ts +117 -0
  58. package/types/api/media/recorder.d.ts +317 -0
  59. package/types/api/media/video-decoder.d.ts +117 -0
  60. package/types/api/media/video-processing.d.ts +84 -0
  61. package/types/api/media/video.d.ts +527 -0
  62. package/types/api/media/voip.d.ts +393 -0
  63. package/types/api/navigate/index.d.ts +327 -0
  64. package/types/api/network/download.d.ts +173 -0
  65. package/types/api/network/mdns.d.ts +191 -0
  66. package/types/api/network/request.d.ts +480 -0
  67. package/types/api/network/tcp.d.ts +181 -0
  68. package/types/api/network/udp.d.ts +218 -0
  69. package/types/api/network/upload.d.ts +201 -0
  70. package/types/api/network/websocket.d.ts +383 -0
  71. package/types/api/open-api/account.d.ts +51 -0
  72. package/types/api/open-api/address.d.ts +68 -0
  73. package/types/api/open-api/authorize.d.ts +80 -0
  74. package/types/api/open-api/card.d.ts +110 -0
  75. package/types/api/open-api/channels.d.ts +225 -0
  76. package/types/api/open-api/customer-service.d.ts +45 -0
  77. package/types/api/open-api/device-voip.d.ts +103 -0
  78. package/types/api/open-api/facial.d.ts +98 -0
  79. package/types/api/open-api/favorites.d.ts +101 -0
  80. package/types/api/open-api/group.d.ts +59 -0
  81. package/types/api/open-api/invoice.d.ts +87 -0
  82. package/types/api/open-api/license-plate.d.ts +27 -0
  83. package/types/api/open-api/login.d.ts +115 -0
  84. package/types/api/open-api/my-miniprogram.d.ts +28 -0
  85. package/types/api/open-api/privacy.d.ts +107 -0
  86. package/types/api/open-api/redpackage.d.ts +24 -0
  87. package/types/api/open-api/settings.d.ts +174 -0
  88. package/types/api/open-api/soter.d.ts +184 -0
  89. package/types/api/open-api/sticker.d.ts +83 -0
  90. package/types/api/open-api/subscribe-message.d.ts +305 -0
  91. package/types/api/open-api/user-info.d.ts +182 -0
  92. package/types/api/open-api/werun.d.ts +101 -0
  93. package/types/api/payment/index.d.ts +119 -0
  94. package/types/api/qq/index.d.ts +354 -0
  95. package/types/api/route/index.d.ts +324 -0
  96. package/types/api/share/index.d.ts +354 -0
  97. package/types/api/skyline/index.d.ts +345 -0
  98. package/types/api/storage/background-fetch.d.ts +131 -0
  99. package/types/api/storage/cache-manager.d.ts +249 -0
  100. package/types/api/storage/index.d.ts +405 -0
  101. package/types/api/swan/bookshelf.d.ts +307 -0
  102. package/types/api/swan/download-package.d.ts +80 -0
  103. package/types/api/swan/index.d.ts +251 -0
  104. package/types/api/swan/pay.d.ts +139 -0
  105. package/types/api/taro.extend.d.ts +233 -0
  106. package/types/api/taro.hooks.d.ts +148 -0
  107. package/types/api/ui/animation.d.ts +427 -0
  108. package/types/api/ui/background.d.ts +69 -0
  109. package/types/api/ui/custom-component.d.ts +23 -0
  110. package/types/api/ui/fonts.d.ts +77 -0
  111. package/types/api/ui/interaction.d.ts +281 -0
  112. package/types/api/ui/menu.d.ts +29 -0
  113. package/types/api/ui/navigation-bar.d.ts +130 -0
  114. package/types/api/ui/pull-down-refresh.d.ts +50 -0
  115. package/types/api/ui/scroll.d.ts +114 -0
  116. package/types/api/ui/sticky.d.ts +32 -0
  117. package/types/api/ui/tab-bar.d.ts +196 -0
  118. package/types/api/ui/window.d.ts +71 -0
  119. package/types/api/worker/index.d.ts +83 -0
  120. package/types/api/wxml/index.d.ts +540 -0
  121. package/types/compile/compiler.d.ts +32 -0
  122. package/types/compile/config/h5.d.ts +134 -0
  123. package/types/compile/config/harmony.d.ts +118 -0
  124. package/types/compile/config/index.d.ts +8 -0
  125. package/types/compile/config/manifest.d.ts +155 -0
  126. package/types/compile/config/mini.d.ts +118 -0
  127. package/types/compile/config/plugin.d.ts +34 -0
  128. package/types/compile/config/project.d.ts +338 -0
  129. package/types/compile/config/rn.d.ts +85 -0
  130. package/types/compile/config/util.d.ts +179 -0
  131. package/types/compile/hooks.d.ts +13 -0
  132. package/types/compile/index.d.ts +11 -0
  133. package/types/compile/viteCompilerContext.d.ts +167 -0
  134. package/types/global.d.ts +428 -0
  135. package/types/index.d.ts +190 -0
  136. package/types/taro.api.d.ts +130 -0
  137. package/types/taro.component.d.ts +168 -0
  138. package/types/taro.config.d.ts +712 -0
  139. package/types/taro.lifecycle.d.ts +220 -0
  140. package/types/taro.runtime.d.ts +9 -0
@@ -0,0 +1,2162 @@
1
+ import Taro from '../../index'
2
+
3
+ declare module '../../index' {
4
+ namespace canvasToTempFilePath {
5
+ interface Option {
6
+ /** 画布标识,传入 [canvas](/docs/components/canvas) 组件实例 (canvas type="2d" 时使用该属性)。 */
7
+ canvas?: Canvas
8
+ /** 画布标识,传入 [canvas](/docs/components/canvas) 组件的 canvas-id */
9
+ canvasId?: string
10
+ /** 图片的质量,目前仅对 jpg 有效。取值范围为 (0, 1],不在范围内时当作 1.0 处理。 */
11
+ quality?: number
12
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
13
+ complete?: (res: TaroGeneral.CallbackResult) => void
14
+ /** 输出的图片的高度 */
15
+ destHeight?: number
16
+ /** 输出的图片的宽度 */
17
+ destWidth?: number
18
+ /** 接口调用失败的回调函数 */
19
+ fail?: (res: TaroGeneral.CallbackResult) => void
20
+ /** 目标文件的类型
21
+ * @default "png"
22
+ */
23
+ fileType?: keyof FileType
24
+ /** 指定的画布区域的高度 */
25
+ height?: number
26
+ /** 接口调用成功的回调函数 */
27
+ success?: (result: SuccessCallbackResult) => void
28
+ /** 指定的画布区域的宽度 */
29
+ width?: number
30
+ /** 指定的画布区域的左上角横坐标 */
31
+ x?: number
32
+ /** 指定的画布区域的左上角纵坐标 */
33
+ y?: number
34
+ }
35
+ interface SuccessCallbackResult extends TaroGeneral.CallbackResult {
36
+ /** 生成文件的临时路径 */
37
+ tempFilePath: string
38
+ /** 图片路径(本地临时文件)。
39
+ * @supported alipay
40
+ */
41
+ apFilePath?: string
42
+ /** 调用结果 */
43
+ errMsg: string
44
+ }
45
+ interface FileType {
46
+ /** jpg 图片 */
47
+ jpg
48
+ /** png 图片 */
49
+ png
50
+ }
51
+ interface CanvasProps {
52
+ /** 指定 canvas 类型,支持 2d 和 webgl */
53
+ type?: string
54
+ /** canvas 组件的唯一标识符,若指定了 type 则无需再指定该属性 */
55
+ canvasId?: string
56
+ /** 当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新
57
+ * @default false
58
+ */
59
+ disableScroll?: boolean
60
+ /** 手指触摸动作开始 */
61
+ onTouchStart?: TaroGeneral.CommonEventFunction
62
+ /** 手指触摸后移动 */
63
+ onTouchMove?: TaroGeneral.CommonEventFunction
64
+ /** 手指触摸动作结束 */
65
+ onTouchEnd?: TaroGeneral.CommonEventFunction
66
+ /** 手指触摸动作被打断,如来电提醒,弹窗 */
67
+ onTouchCancel?: TaroGeneral.CommonEventFunction
68
+ /** 手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动 */
69
+ onLongTap?: TaroGeneral.CommonEventFunction
70
+ /** 当发生错误时触发 error 事件,detail = {errMsg: 'something wrong'} */
71
+ onError?: TaroGeneral.CommonEventFunction<CanvasProps.onErrorEventDetail>
72
+ }
73
+
74
+ namespace CanvasProps {
75
+ interface onErrorEventDetail {
76
+ errMsg: string
77
+ }
78
+ }
79
+ }
80
+ namespace canvasPutImageData {
81
+ interface Option {
82
+ /** 画布标识,传入 [canvas](/docs/components/canvas) 组件的 canvas-id 属性。 */
83
+ canvasId: string
84
+ /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */
85
+ data: Uint8ClampedArray
86
+ /** 源图像数据矩形区域的高度 */
87
+ height: number
88
+ /** 源图像数据矩形区域的宽度 */
89
+ width: number
90
+ /** 源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量) */
91
+ x: number
92
+ /** 源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量) */
93
+ y: number
94
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
95
+ complete?: (res: TaroGeneral.CallbackResult) => void
96
+ /** 接口调用失败的回调函数 */
97
+ fail?: (res: TaroGeneral.CallbackResult) => void
98
+ /** 接口调用成功的回调函数 */
99
+ success?: (res: TaroGeneral.CallbackResult) => void
100
+ }
101
+ }
102
+ namespace canvasGetImageData {
103
+ interface Option {
104
+ /** 画布标识,传入 [canvas](/docs/components/canvas) 组件的 `canvas-id` 属性。 */
105
+ canvasId: string
106
+ /** 将要被提取的图像数据矩形区域的高度 */
107
+ height: number
108
+ /** 将要被提取的图像数据矩形区域的宽度 */
109
+ width: number
110
+ /** 将要被提取的图像数据矩形区域的左上角横坐标 */
111
+ x: number
112
+ /** 将要被提取的图像数据矩形区域的左上角纵坐标 */
113
+ y: number
114
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
115
+ complete?: (res: TaroGeneral.CallbackResult) => void
116
+ /** 接口调用失败的回调函数 */
117
+ fail?: (res: TaroGeneral.CallbackResult) => void
118
+ /** 接口调用成功的回调函数 */
119
+ success?: (result: SuccessCallbackResult) => void
120
+ }
121
+ interface SuccessCallbackResult extends TaroGeneral.CallbackResult {
122
+ /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */
123
+ data: Uint8ClampedArray
124
+ /** 图像数据矩形的高度 */
125
+ height: number
126
+ /** 图像数据矩形的宽度 */
127
+ width: number
128
+ /** 调用结果 */
129
+ errMsg: string
130
+ }
131
+ }
132
+
133
+ namespace createOffscreenCanvas {
134
+ interface Option {
135
+ /** 创建的离屏 canvas 类型
136
+ * @default: 'webgl'
137
+ */
138
+ type?: 'webgl' | '2d'
139
+ /** 画布高度 */
140
+ height?: number
141
+ /** 画布宽度 */
142
+ width?: number
143
+ /** 在自定义组件下,当前组件实例的 this,以操作组件内 [canvas](/docs/components/canvas) 组件 */
144
+ compInst?: TaroGeneral.IAnyObject,
145
+ }
146
+ }
147
+
148
+ namespace toTempFilePath {
149
+ interface Option {
150
+ /** 指定的画布区域的左上角横坐标 */
151
+ x?: number
152
+ /** 指定的画布区域的左上角纵坐标 */
153
+ y?: number
154
+ /** 指定的画布区域的宽度 */
155
+ width?: number
156
+ /** 指定的画布区域的高度 */
157
+ height?: number
158
+ /** 输出的图片的高度 */
159
+ destHeight?: number
160
+ /** 输出的图片的宽度 */
161
+ destWidth?: number
162
+ /** 目标文件的类型
163
+ * @default "png"
164
+ */
165
+ fileType?: keyof FileType
166
+ /** 图片的质量,目前仅对 jpg 有效。取值范围为 (0, 1],不在范围内时当作 1.0 处理。 */
167
+ quality?: number
168
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
169
+ complete?: (res: TaroGeneral.CallbackResult) => void
170
+ /** 接口调用失败的回调函数 */
171
+ fail?: (res: TaroGeneral.CallbackResult) => void
172
+ /** 接口调用成功的回调函数 */
173
+ success?: (result: SuccessCallbackResult) => void
174
+ }
175
+ interface FileType {
176
+ /** jpg 图片 */
177
+ jpg
178
+ /** png 图片 */
179
+ png
180
+ }
181
+ interface SuccessCallbackResult extends TaroGeneral.CallbackResult {
182
+ /** 生成文件的临时路径 */
183
+ tempFilePath: string
184
+ }
185
+ }
186
+
187
+ /** Canvas 实例,可通过 SelectorQuery 获取。
188
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.html
189
+ */
190
+ interface Canvas {
191
+ /** 画布高度 */
192
+ height: number
193
+ /** 画布宽度 */
194
+ width: number
195
+ /** 取消由 requestAnimationFrame 添加到计划中的动画帧请求。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
196
+ * @supported weapp, alipay, tt
197
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.cancelAnimationFrame.html
198
+ */
199
+ cancelAnimationFrame(requestID: number): void
200
+ /** 创建一个 ImageData 对象。仅支持在 2D Canvas 中使用。
201
+ * @supported weapp
202
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createImageData.html
203
+ */
204
+ createImageData(): ImageData
205
+ /** 创建一个图片对象。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
206
+ * @supported weapp, alipay, tt
207
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createImage.html
208
+ */
209
+ createImage(): Image
210
+ /** 创建 Path2D 对象
211
+ * @supported weapp
212
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html
213
+ */
214
+ createPath2D(
215
+ path: Path2D
216
+ ): Path2D
217
+ /** 支持获取 2D 和 WebGL 绘图上下文
218
+ * @supported weapp, alipay, tt
219
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.getContext.html
220
+ */
221
+ getContext(contextType: string): RenderingContext
222
+ /** 在下次进行重绘时执行。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
223
+ * @supported weapp
224
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.requestAnimationFrame.html
225
+ */
226
+ requestAnimationFrame(
227
+ /** 执行的 callback */
228
+ callback: (...args: any[]) => any,
229
+ ): number
230
+ /** 返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。
231
+ * @supported weapp
232
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.toDataURL.html
233
+ */
234
+ toDataURL(
235
+ /** 图片格式,默认为 image/png */
236
+ type: string,
237
+ /** 在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。 */
238
+ encoderOptions: number
239
+ ): string
240
+ /** 把当前画布指定区域保存为图片
241
+ * @supported alipay
242
+ * @see https://opendocs.alipay.com/mini/api/toTempFilePath?pathHash=e79fe218
243
+ */
244
+ toTempFilePath(oprion: toTempFilePath.Option): void
245
+ }
246
+
247
+ /** canvas 组件的绘图上下文
248
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html
249
+ */
250
+ interface CanvasContext {
251
+ /** 填充颜色。用法同 [CanvasContext.setFillStyle()]。 */
252
+ fillStyle: string
253
+ /** 边框颜色。用法同 [CanvasContext.setFillStyle()]。 */
254
+ strokeStyle: string
255
+ /** 阴影相对于形状在水平方向的偏移 */
256
+ shadowOffsetX: number
257
+ /** 阴影相对于形状在竖直方向的偏移 */
258
+ shadowOffsetY: number
259
+ /** 阴影的模糊级别 */
260
+ shadowBlur: number
261
+ /** 阴影的颜色 */
262
+ shadowColor: string
263
+ /** 线条的宽度。用法同 [CanvasContext.setLineWidth()]。 */
264
+ lineWidth: number
265
+ /** 线条的端点样式。用法同 [CanvasContext.setLineCap()]。 */
266
+ lineCap: keyof CanvasContext.LineCap
267
+ /** 线条的交点样式。用法同 [CanvasContext.setLineJoin()]。 */
268
+ lineJoin: keyof CanvasContext.LineJoin
269
+ /** 最大斜接长度。用法同 [CanvasContext.setMiterLimit()]。 */
270
+ miterLimit: number
271
+ /** 虚线偏移量,初始值为0 */
272
+ lineDashOffset: number
273
+ /** 当前字体样式的属性。符合 [CSS font 语法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font) 的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif。 */
274
+ font: string
275
+ /** 全局画笔透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */
276
+ globalAlpha: number
277
+ /** 在绘制新形状时应用的合成操作的类型。目前安卓版本只适用于 `fill` 填充块的合成,用于 `stroke` 线段的合成效果都是 `source-over`。
278
+ *
279
+ * 目前支持的操作有
280
+ * - 安卓:xor, source-over, source-atop, destination-out, lighter, overlay, darken, lighten, hard-light
281
+ * - iOS:xor, source-over, source-atop, destination-over, destination-out, lighter, multiply, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, saturation, luminosity */
282
+ globalCompositeOperation: string
283
+ /** 创建一条弧线。
284
+ *
285
+ * - 创建一个圆可以指定起始弧度为 0,终止弧度为 2 * Math.PI。
286
+ * - 用 `stroke` 或者 `fill` 方法来在 `canvas` 中画弧线。
287
+ *
288
+ * 针对 arc(100, 75, 50, 0, 1.5 * Math.PI)的三个关键坐标如下:
289
+ *
290
+ * - 绿色: 圆心 (100, 75)
291
+ * - 红色: 起始弧度 (0)
292
+ * - 蓝色: 终止弧度 (1.5 * Math.PI)
293
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
294
+ * @example
295
+ * ```tsx
296
+ * const ctx = Taro.createCanvasContext('myCanvas')
297
+ * // Draw coordinates
298
+ * ctx.arc(100, 75, 50, 0, 2 * Math.PI)
299
+ * ctx.setFillStyle('#EEEEEE')
300
+ * ctx.fill()
301
+ * ctx.beginPath()
302
+ * ctx.moveTo(40, 75)
303
+ * ctx.lineTo(160, 75)
304
+ * ctx.moveTo(100, 15)
305
+ * ctx.lineTo(100, 135)
306
+ * ctx.setStrokeStyle('#AAAAAA')
307
+ * ctx.stroke()
308
+ * ctx.setFontSize(12)
309
+ * ctx.setFillStyle('black')
310
+ * ctx.fillText('0', 165, 78)
311
+ * ctx.fillText('0.5*PI', 83, 145)
312
+ * ctx.fillText('1*PI', 15, 78)
313
+ * ctx.fillText('1.5*PI', 83, 10)
314
+ * // Draw points
315
+ * ctx.beginPath()
316
+ * ctx.arc(100, 75, 2, 0, 2 * Math.PI)
317
+ * ctx.setFillStyle('lightgreen')
318
+ * ctx.fill()
319
+ * ctx.beginPath()
320
+ * ctx.arc(100, 25, 2, 0, 2 * Math.PI)
321
+ * ctx.setFillStyle('blue')
322
+ * ctx.fill()
323
+ * ctx.beginPath()
324
+ * ctx.arc(150, 75, 2, 0, 2 * Math.PI)
325
+ * ctx.setFillStyle('red')
326
+ * ctx.fill()
327
+ * // Draw arc
328
+ * ctx.beginPath()
329
+ * ctx.arc(100, 75, 50, 0, 1.5 * Math.PI)
330
+ * ctx.setStrokeStyle('#333333')
331
+ * ctx.stroke()
332
+ * ctx.draw()
333
+ * ```
334
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arc.html
335
+ */
336
+ arc(
337
+ /** 圆心的 x 坐标 */
338
+ x: number,
339
+ /** 圆心的 y 坐标 */
340
+ y: number,
341
+ /** 圆的半径 */
342
+ r: number,
343
+ /** 起始弧度,单位弧度(在3点钟方向) */
344
+ sAngle: number,
345
+ /** 终止弧度 */
346
+ eAngle: number,
347
+ /** 弧度的方向是否是逆时针 */
348
+ counterclockwise?: boolean,
349
+ /** 弧度的方向是否是逆时针
350
+ * @supported tt
351
+ */
352
+ anticlockwise?: boolean
353
+ ): void
354
+ /** 根据控制点和半径绘制圆弧路径。
355
+ * @supported weapp, alipay, jd, qq, h5, harmony_hybrid
356
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arcTo.html
357
+ */
358
+ arcTo(
359
+ /** 第一个控制点的 x 轴坐标 */
360
+ x1: number,
361
+ /** 第一个控制点的 y 轴坐标 */
362
+ y1: number,
363
+ /** 第二个控制点的 x 轴坐标 */
364
+ x2: number,
365
+ /** 第二个控制点的 y 轴坐标 */
366
+ y2: number,
367
+ /** 圆弧的半径 */
368
+ radius: number,
369
+ ): void
370
+ /** 开始创建一个路径。需要调用 `fill` 或者 `stroke` 才会使用路径进行填充或描边
371
+ *
372
+ * - 在最开始的时候相当于调用了一次 `beginPath`。
373
+ * - 同一个路径内的多次 `setFillStyle`、`setStrokeStyle`、`setLineWidth`等设置,以最后一次设置为准。
374
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
375
+ * @example
376
+ * ```tsx
377
+ * const ctx = Taro.createCanvasContext('myCanvas')
378
+ * // begin path
379
+ * ctx.rect(10, 10, 100, 30)
380
+ * ctx.setFillStyle('yellow')
381
+ * ctx.fill()
382
+ * // begin another path
383
+ * ctx.beginPath()
384
+ * ctx.rect(10, 40, 100, 30)
385
+ * // only fill this rect, not in current path
386
+ * ctx.setFillStyle('blue')
387
+ * ctx.fillRect(10, 70, 100, 30)
388
+ * ctx.rect(10, 100, 100, 30)
389
+ * // it will fill current path
390
+ * ctx.setFillStyle('red')
391
+ * ctx.fill()
392
+ * ctx.draw()
393
+ * ```
394
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.beginPath.html
395
+ */
396
+ beginPath(): void
397
+ /** 创建三次方贝塞尔曲线路径。曲线的起始点为路径中前一个点。
398
+ *
399
+ * 针对 moveTo(20, 20) bezierCurveTo(20, 100, 200, 100, 200, 20) 的三个关键坐标如下:
400
+ *
401
+ * - 红色:起始点(20, 20)
402
+ * - 蓝色:两个控制点(20, 100) (200, 100)
403
+ * - 绿色:终止点(200, 20)
404
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
405
+ * @example
406
+ * ```tsx
407
+ * const ctx = Taro.createCanvasContext('myCanvas')
408
+ * // Draw points
409
+ * ctx.beginPath()
410
+ * ctx.arc(20, 20, 2, 0, 2 * Math.PI)
411
+ * ctx.setFillStyle('red')
412
+ * ctx.fill()
413
+ * ctx.beginPath()
414
+ * ctx.arc(200, 20, 2, 0, 2 * Math.PI)
415
+ * ctx.setFillStyle('lightgreen')
416
+ * ctx.fill()
417
+ * ctx.beginPath()
418
+ * ctx.arc(20, 100, 2, 0, 2 * Math.PI)
419
+ * ctx.arc(200, 100, 2, 0, 2 * Math.PI)
420
+ * ctx.setFillStyle('blue')
421
+ * ctx.fill()
422
+ * ctx.setFillStyle('black')
423
+ * ctx.setFontSize(12)
424
+ * // Draw guides
425
+ * ctx.beginPath()
426
+ * ctx.moveTo(20, 20)
427
+ * ctx.lineTo(20, 100)
428
+ * ctx.lineTo(150, 75)
429
+ * ctx.moveTo(200, 20)
430
+ * ctx.lineTo(200, 100)
431
+ * ctx.lineTo(70, 75)
432
+ * ctx.setStrokeStyle('#AAAAAA')
433
+ * ctx.stroke()
434
+ * // Draw quadratic curve
435
+ * ctx.beginPath()
436
+ * ctx.moveTo(20, 20)
437
+ * ctx.bezierCurveTo(20, 100, 200, 100, 200, 20)
438
+ * ctx.setStrokeStyle('black')
439
+ * ctx.stroke()
440
+ * ctx.draw()
441
+ * ```
442
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.bezierCurveTo.html
443
+ */
444
+ bezierCurveTo(
445
+ /** 第一个贝塞尔控制点的 x 坐标 */
446
+ cp1x: number,
447
+ /** 第一个贝塞尔控制点的 y 坐标 */
448
+ cp1y: number,
449
+ /** 第二个贝塞尔控制点的 x 坐标 */
450
+ cp2x: number,
451
+ /** 第二个贝塞尔控制点的 y 坐标 */
452
+ cp2y: number,
453
+ /** 结束点的 x 坐标 */
454
+ x: number,
455
+ /** 结束点的 y 坐标 */
456
+ y: number,
457
+ ): void
458
+ /** 清除画布上在该矩形区域内的内容
459
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
460
+ * @example
461
+ * clearRect 并非画一个白色的矩形在地址区域,而是清空,为了有直观感受,对 canvas 加了一层背景色。
462
+ * ```html
463
+ * <canvas canvas-id="myCanvas" style="border: 1px solid; background: #123456;"/>
464
+ * ```
465
+ * ```tsx
466
+ * const ctx = Taro.createCanvasContext('myCanvas')
467
+ * ctx.setFillStyle('red')
468
+ * ctx.fillRect(0, 0, 150, 200)
469
+ * ctx.setFillStyle('blue')
470
+ * ctx.fillRect(150, 0, 150, 200)
471
+ * ctx.clearRect(10, 10, 150, 75)
472
+ * ctx.draw()
473
+ * ```
474
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clearRect.html
475
+ */
476
+ clearRect(
477
+ /** 矩形路径左上角的横坐标 */
478
+ x: number,
479
+ /** 矩形路径左上角的纵坐标 */
480
+ y: number,
481
+ /** 矩形路径的宽度 */
482
+ width: number,
483
+ /** 矩形路径的高度 */
484
+ height: number,
485
+ ): void
486
+ /** 从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。可以在使用 `clip` 方法前通过使用 `save` 方法对当前画布区域进行保存,并在以后的任意时间通过`restore`方法对其进行恢复。
487
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
488
+ * @example
489
+ * ```tsx
490
+ * const ctx = Taro.createCanvasContext('myCanvas')
491
+ * Taro.downloadFile({
492
+ * url: 'http://is5.mzstatic.com/image/thumb/Purple128/v4/75/3b/90/753b907c-b7fb-5877-215a-759bd73691a4/source/50x50bb.jpg',
493
+ * success: function(res) {
494
+ * ctx.save()
495
+ * ctx.beginPath()
496
+ * ctx.arc(50, 50, 25, 0, 2*Math.PI)
497
+ * ctx.clip()
498
+ * ctx.drawImage(res.tempFilePath, 25, 25)
499
+ * ctx.restore()
500
+ * ctx.draw()
501
+ * }
502
+ * })
503
+ * ```
504
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clip.html
505
+ */
506
+ clip(): void
507
+ /** 关闭一个路径。会连接起点和终点。如果关闭路径后没有调用 `fill` 或者 `stroke` 并开启了新的路径,那之前的路径将不会被渲染。
508
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
509
+ * @example
510
+ * ```tsx
511
+ * const ctx = Taro.createCanvasContext('myCanvas')
512
+ * ctx.moveTo(10, 10)
513
+ * ctx.lineTo(100, 10)
514
+ * ctx.lineTo(100, 100)
515
+ * ctx.closePath()
516
+ * ctx.stroke()
517
+ * ctx.draw()
518
+ * ```
519
+ * @example
520
+ * ```tsx
521
+ * const ctx = Taro.createCanvasContext('myCanvas')
522
+ * // begin path
523
+ * ctx.rect(10, 10, 100, 30)
524
+ * ctx.closePath()
525
+ * // begin another path
526
+ * ctx.beginPath()
527
+ * ctx.rect(10, 40, 100, 30)
528
+ * // only fill this rect, not in current path
529
+ * ctx.setFillStyle('blue')
530
+ * ctx.fillRect(10, 70, 100, 30)
531
+ * ctx.rect(10, 100, 100, 30)
532
+ * // it will fill current path
533
+ * ctx.setFillStyle('red')
534
+ * ctx.fill()
535
+ * ctx.draw()
536
+ * ```
537
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.closePath.html
538
+ */
539
+ closePath(): void
540
+ /** 创建一个圆形的渐变颜色。起点在圆心,终点在圆环。返回的`CanvasGradient`对象需要使用 [CanvasGradient.addColorStop()](/docs/apis/canvas/CanvasGradient#addcolorstop) 来指定渐变点,至少要两个。
541
+ * @supported weapp, alipay, swan, jd, qq, h5, harmony_hybrid
542
+ * @example
543
+ * ```tsx
544
+ * const ctx = Taro.createCanvasContext('myCanvas')
545
+ * // Create circular gradient
546
+ * const grd = ctx.createCircularGradient(75, 50, 50)
547
+ * grd.addColorStop(0, 'red')
548
+ * grd.addColorStop(1, 'white')
549
+ * // Fill with gradient
550
+ * ctx.setFillStyle(grd)
551
+ * ctx.fillRect(10, 10, 150, 80)
552
+ * ctx.draw()
553
+ * ```
554
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createCircularGradient.html
555
+ */
556
+ createCircularGradient(
557
+ /** 圆心的 x 坐标 */
558
+ x: number,
559
+ /** 圆心的 y 坐标 */
560
+ y: number,
561
+ /** 圆的半径 */
562
+ r: number,
563
+ ): CanvasGradient
564
+ /** 创建一个线性的渐变颜色。返回的`CanvasGradient`对象需要使用 [CanvasGradient.addColorStop()](/docs/apis/canvas/CanvasGradient#addcolorstop) 来指定渐变点,至少要两个。
565
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
566
+ * @example
567
+ * ```tsx
568
+ * const ctx = Taro.createCanvasContext('myCanvas')
569
+ * // Create linear gradient
570
+ * const grd = ctx.createLinearGradient(0, 0, 200, 0)
571
+ * grd.addColorStop(0, 'red')
572
+ * grd.addColorStop(1, 'white')
573
+ * // Fill with gradient
574
+ * ctx.setFillStyle(grd)
575
+ * ctx.fillRect(10, 10, 150, 80)
576
+ * ctx.draw()
577
+ * ```
578
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createLinearGradient.html
579
+ */
580
+ createLinearGradient(
581
+ /** 起点的 x 坐标 */
582
+ x0: number,
583
+ /** 起点的 y 坐标 */
584
+ y0: number,
585
+ /** 终点的 x 坐标 */
586
+ x1: number,
587
+ /** 终点的 y 坐标 */
588
+ y1: number,
589
+ ): CanvasGradient
590
+ /** 对指定的图像创建模式的方法,可在指定的方向上重复元图像
591
+ * @supported weapp, alipay, jd, qq, h5, harmony_hybrid
592
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createPattern.html
593
+ */
594
+ createPattern(
595
+ /** 重复的图像源,仅支持包内路径和临时路径 */
596
+ image: string,
597
+ /** 如何重复图像 */
598
+ repetition: keyof CanvasContext.Repetition,
599
+ ): CanvasPattern | null | Promise<CanvasPattern | null>
600
+ /** 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。
601
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
602
+ * @h5 第二次调用 draw 前需要等待上一次 draw 调用结束后再调用,否则新的一次 draw 调用栈不会清空而导致结果异常。
603
+ * @example
604
+ * 第二次 draw() reserve 为 true。所以保留了上一次的绘制结果,在上下文设置的 fillStyle 'red' 也变成了默认的 'black'。
605
+ *
606
+ * ```tsx
607
+ * const ctx = Taro.createCanvasContext('myCanvas')
608
+ * ctx.setFillStyle('red')
609
+ * ctx.fillRect(10, 10, 150, 100)
610
+ * ctx.draw(false, () => {
611
+ * ctx.fillRect(50, 50, 150, 100)
612
+ * ctx.draw(true)
613
+ * })
614
+ * ```
615
+ * @example
616
+ * 第二次 draw() reserve 为 false。所以没有保留了上一次的绘制结果和在上下文设置的 fillStyle 'red'。
617
+ *
618
+ * ```tsx
619
+ * const ctx = Taro.createCanvasContext('myCanvas')
620
+ * ctx.setFillStyle('red')
621
+ * ctx.fillRect(10, 10, 150, 100)
622
+ * ctx.draw(false, () => {
623
+ * ctx.fillRect(50, 50, 150, 100)
624
+ * ctx.draw()
625
+ * })
626
+ * ```
627
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.draw.html
628
+ */
629
+ draw(
630
+ /** 本次绘制是否接着上一次绘制。即 reserve 参数为 false,则在本次调用绘制之前 native 层会先清空画布再继续绘制;若 reserve 参数为 true,则保留当前画布上的内容,本次调用 drawCanvas 绘制的内容覆盖在上面,默认 false。 */
631
+ reserve?: boolean,
632
+ /** 绘制完成后执行的回调函数 */
633
+ callback?: (...args: any[]) => any,
634
+ /** 是否使用硬件加速
635
+ * @supported jd
636
+ */
637
+ useHardwareAccelerate?: boolean
638
+ ): void | Promise<void>
639
+ /** 绘制图像到画布
640
+ * @supported weapp, h5, harmony_hybrid
641
+ * @example
642
+ * 有三个版本的写法:
643
+ *
644
+ * - drawImage(imageResource, dx, dy)
645
+ * - drawImage(imageResource, dx, dy, dWidth, dHeight)
646
+ * - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持
647
+ *
648
+ * ```tsx
649
+ * const ctx = Taro.createCanvasContext('myCanvas')
650
+ * Taro.chooseImage({
651
+ * success: function(res){
652
+ * ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100)
653
+ * ctx.draw()
654
+ * }
655
+ * })
656
+ * ```
657
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
658
+ */
659
+ drawImage(
660
+ /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */
661
+ imageResource: string,
662
+ /** imageResource的左上角在目标 canvas 上 x 轴的位置 */
663
+ dx: number,
664
+ /** imageResource的左上角在目标 canvas 上 y 轴的位置 */
665
+ dy: number,
666
+ ): void
667
+ /** 绘制图像到画布
668
+ * @supported weapp, alipay, h5, harmony_hybrid
669
+ * @example
670
+ * 有三个版本的写法:
671
+ *
672
+ * - drawImage(imageResource, dx, dy)
673
+ * - drawImage(imageResource, dx, dy, dWidth, dHeight)
674
+ * - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持
675
+ *
676
+ * ```tsx
677
+ * const ctx = Taro.createCanvasContext('myCanvas')
678
+ * Taro.chooseImage({
679
+ * success: function(res){
680
+ * ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100)
681
+ * ctx.draw()
682
+ * }
683
+ * })
684
+ * ```
685
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
686
+ */
687
+ drawImage(
688
+ /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */
689
+ imageResource: string,
690
+ /** imageResource的左上角在目标 canvas 上 x 轴的位置 */
691
+ dx: number,
692
+ /** imageResource的左上角在目标 canvas 上 y 轴的位置 */
693
+ dy: number,
694
+ /** 在目标画布上绘制imageResource的宽度,允许对绘制的imageResource进行缩放 */
695
+ dWidth: number,
696
+ /** 在目标画布上绘制imageResource的高度,允许对绘制的imageResource进行缩放 */
697
+ dHeight: number,
698
+ ): void
699
+ /** 绘制图像到画布
700
+ * @supported weapp, swan, jd, qq, tt, h5, harmony_hybrid
701
+ * @example
702
+ * 有三个版本的写法:
703
+ *
704
+ * - drawImage(imageResource, dx, dy)
705
+ * - drawImage(imageResource, dx, dy, dWidth, dHeight)
706
+ * - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持
707
+ *
708
+ * ```tsx
709
+ * const ctx = Taro.createCanvasContext('myCanvas')
710
+ * Taro.chooseImage({
711
+ * success: function(res){
712
+ * ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100)
713
+ * ctx.draw()
714
+ * }
715
+ * })
716
+ * ```
717
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
718
+ */
719
+ drawImage(
720
+ /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */
721
+ imageResource: string,
722
+ /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的左上角 x 坐标 */
723
+ sx: number,
724
+ /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的左上角 y 坐标 */
725
+ sy: number,
726
+ /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的宽度 */
727
+ sWidth: number,
728
+ /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的高度 */
729
+ sHeight: number,
730
+ /** imageResource的左上角在目标 canvas 上 x 轴的位置 */
731
+ dx: number,
732
+ /** imageResource的左上角在目标 canvas 上 y 轴的位置 */
733
+ dy: number,
734
+ /** 在目标画布上绘制imageResource的宽度,允许对绘制的imageResource进行缩放 */
735
+ dWidth: number,
736
+ /** 在目标画布上绘制imageResource的高度,允许对绘制的imageResource进行缩放 */
737
+ dHeight: number,
738
+ ): void
739
+ /** 对当前路径中的内容进行填充。默认的填充色为黑色。
740
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
741
+ * @example
742
+ * 如果当前路径没有闭合,fill() 方法会将起点和终点进行连接,然后填充。
743
+ *
744
+ * ```tsx
745
+ * const ctx = Taro.createCanvasContext('myCanvas')
746
+ * ctx.moveTo(10, 10)
747
+ * ctx.lineTo(100, 10)
748
+ * ctx.lineTo(100, 100)
749
+ * ctx.fill()
750
+ * ctx.draw()
751
+ * ```
752
+ * @example
753
+ * fill() 填充的的路径是从 beginPath() 开始计算,但是不会将 fillRect() 包含进去。
754
+ *
755
+ * ```tsx
756
+ * const ctx = Taro.createCanvasContext('myCanvas')
757
+ * // begin path
758
+ * ctx.rect(10, 10, 100, 30)
759
+ * ctx.setFillStyle('yellow')
760
+ * ctx.fill()
761
+ * // begin another path
762
+ * ctx.beginPath()
763
+ * ctx.rect(10, 40, 100, 30)
764
+ * // only fill this rect, not in current path
765
+ * ctx.setFillStyle('blue')
766
+ * ctx.fillRect(10, 70, 100, 30)
767
+ * ctx.rect(10, 100, 100, 30)
768
+ * // it will fill current path
769
+ * ctx.setFillStyle('red')
770
+ * ctx.fill()
771
+ * ctx.draw()
772
+ * ```
773
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fill.html
774
+ */
775
+ fill(): void
776
+ /** 填充一个矩形。用 [`setFillStyle`](/docs/apis/canvas/CanvasContext#setfillstyle) 设置矩形的填充色,如果没设置默认是黑色。
777
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
778
+ * @example
779
+ * ```tsx
780
+ * const ctx = Taro.createCanvasContext('myCanvas')
781
+ * ctx.setFillStyle('red')
782
+ * ctx.fillRect(10, 10, 150, 75)
783
+ * ctx.draw()
784
+ * ```
785
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillRect.html
786
+ */
787
+ fillRect(
788
+ /** 矩形路径左上角的横坐标 */
789
+ x: number,
790
+ /** 矩形路径左上角的纵坐标 */
791
+ y: number,
792
+ /** 矩形路径的宽度 */
793
+ width: number,
794
+ /** 矩形路径的高度 */
795
+ height: number,
796
+ ): void
797
+ /** 在画布上绘制被填充的文本
798
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
799
+ * @example
800
+ * ```tsx
801
+ * const ctx = Taro.createCanvasContext('myCanvas')
802
+ * ctx.setFontSize(20)
803
+ * ctx.fillText('Hello', 20, 20)
804
+ * ctx.fillText('MINA', 100, 100)
805
+ * ctx.draw()
806
+ * ```
807
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillText.html
808
+ */
809
+ fillText(
810
+ /** 在画布上输出的文本 */
811
+ text: string,
812
+ /** 绘制文本的左上角 x 坐标位置 */
813
+ x: number,
814
+ /** 绘制文本的左上角 y 坐标位置 */
815
+ y: number,
816
+ /** 需要绘制的最大宽度,可选 */
817
+ maxWidth?: number,
818
+ ): void
819
+ /** 增加一个新点,然后创建一条从上次指定点到目标点的线。用 `stroke` 方法来画线条
820
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
821
+
822
+ * @example
823
+ * ```tsx
824
+ * const ctx = Taro.createCanvasContext('myCanvas')
825
+ * ctx.moveTo(10, 10)
826
+ * ctx.rect(10, 10, 100, 50)
827
+ * ctx.lineTo(110, 60)
828
+ * ctx.stroke()
829
+ * ctx.draw()
830
+ * ```
831
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.lineTo.html
832
+ */
833
+ lineTo(
834
+ /** 目标位置的 x 坐标 */
835
+ x: number,
836
+ /** 目标位置的 y 坐标 */
837
+ y: number,
838
+ ): void
839
+ /** 测量文本尺寸信息。目前仅返回文本宽度(width)。同步接口。
840
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
841
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.measureText.html
842
+ */
843
+ measureText(
844
+ /** 要测量的文本 */
845
+ text: string,
846
+ ): TextMetrics
847
+ /** 把路径移动到画布中的指定点,不创建线条。用 `stroke` 方法来画线条
848
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
849
+ * @example
850
+ * ```tsx
851
+ * const ctx = Taro.createCanvasContext('myCanvas')
852
+ * ctx.moveTo(10, 10)
853
+ * ctx.lineTo(100, 10)
854
+ * ctx.moveTo(10, 50)
855
+ * ctx.lineTo(100, 50)
856
+ * ctx.stroke()
857
+ * ctx.draw()
858
+ * ```
859
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.moveTo.html
860
+ */
861
+ moveTo(
862
+ /** 目标位置的 x 坐标 */
863
+ x: number,
864
+ /** 目标位置的 y 坐标 */
865
+ y: number,
866
+ ): void
867
+ /** 创建二次贝塞尔曲线路径。曲线的起始点为路径中前一个点。
868
+ *
869
+ * 针对 moveTo(20, 20) quadraticCurveTo(20, 100, 200, 20) 的三个关键坐标如下:
870
+ *
871
+ * - 红色:起始点(20, 20)
872
+ * - 蓝色:控制点(20, 100)
873
+ * - 绿色:终止点(200, 20)
874
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
875
+ * @example
876
+ * ```tsx
877
+ * const ctx = Taro.createCanvasContext('myCanvas')
878
+ * // Draw points
879
+ * ctx.beginPath()
880
+ * ctx.arc(20, 20, 2, 0, 2 * Math.PI)
881
+ * ctx.setFillStyle('red')
882
+ * ctx.fill()
883
+ * ctx.beginPath()
884
+ * ctx.arc(200, 20, 2, 0, 2 * Math.PI)
885
+ * ctx.setFillStyle('lightgreen')
886
+ * ctx.fill()
887
+ * ctx.beginPath()
888
+ * ctx.arc(20, 100, 2, 0, 2 * Math.PI)
889
+ * ctx.setFillStyle('blue')
890
+ * ctx.fill()
891
+ * ctx.setFillStyle('black')
892
+ * ctx.setFontSize(12)
893
+ * // Draw guides
894
+ * ctx.beginPath()
895
+ * ctx.moveTo(20, 20)
896
+ * ctx.lineTo(20, 100)
897
+ * ctx.lineTo(200, 20)
898
+ * ctx.setStrokeStyle('#AAAAAA')
899
+ * ctx.stroke()
900
+ * // Draw quadratic curve
901
+ * ctx.beginPath()
902
+ * ctx.moveTo(20, 20)
903
+ * ctx.quadraticCurveTo(20, 100, 200, 20)
904
+ * ctx.setStrokeStyle('black')
905
+ * ctx.stroke()
906
+ * ctx.draw()
907
+ * ```
908
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.quadraticCurveTo.html
909
+ */
910
+ quadraticCurveTo(
911
+ /** 贝塞尔控制点的 x 坐标 */
912
+ cpx: number,
913
+ /** 贝塞尔控制点的 y 坐标 */
914
+ cpy: number,
915
+ /** 结束点的 x 坐标 */
916
+ x: number,
917
+ /** 结束点的 y 坐标 */
918
+ y: number,
919
+ ): void
920
+ /** 创建一个矩形路径。需要用 [`fill`](/docs/apis/canvas/CanvasContext#fill) 或者 [`stroke`](/docs/apis/canvas/CanvasContext#stroke) 方法将矩形真正的画到 `canvas` 中
921
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
922
+ * @example
923
+ * ```tsx
924
+ * const ctx = Taro.createCanvasContext('myCanvas')
925
+ * ctx.rect(10, 10, 150, 75)
926
+ * ctx.setFillStyle('red')
927
+ * ctx.fill()
928
+ * ctx.draw()
929
+ * ```
930
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rect.html
931
+ */
932
+ rect(
933
+ /** 矩形路径左上角的横坐标 */
934
+ x: number,
935
+ /** 矩形路径左上角的纵坐标 */
936
+ y: number,
937
+ /** 矩形路径的宽度 */
938
+ width: number,
939
+ /** 矩形路径的高度 */
940
+ height: number,
941
+ ): void
942
+ /** 重置绘图上下文状态
943
+ * @supported h5, harmony_hybrid
944
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/reset
945
+ */
946
+ reset(): void
947
+ /** 恢复之前保存的绘图上下文
948
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
949
+ * @example
950
+ * ```tsx
951
+ * const ctx = Taro.createCanvasContext('myCanvas')
952
+ * // save the default fill style
953
+ * ctx.save()
954
+ * ctx.setFillStyle('red')
955
+ * ctx.fillRect(10, 10, 150, 100)
956
+ * // restore to the previous saved state
957
+ * ctx.restore()
958
+ * ctx.fillRect(50, 50, 150, 100)
959
+ * ctx.draw()
960
+ * ```
961
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.restore.html
962
+ */
963
+ restore(): void
964
+ /** 以原点为中心顺时针旋转当前坐标轴。多次调用旋转的角度会叠加。原点可以用 `translate` 方法修改。
965
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
966
+ * @example
967
+ * ```tsx
968
+ * const ctx = Taro.createCanvasContext('myCanvas')
969
+ * ctx.strokeRect(100, 10, 150, 100)
970
+ * ctx.rotate(20 * Math.PI / 180)
971
+ * ctx.strokeRect(100, 10, 150, 100)
972
+ * ctx.rotate(20 * Math.PI / 180)
973
+ * ctx.strokeRect(100, 10, 150, 100)
974
+ * ctx.draw()
975
+ * ```
976
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rotate.html
977
+ */
978
+ rotate(
979
+ /** 旋转角度,以弧度计 degrees * Math.PI/180;degrees 范围为 0-360 */
980
+ rotate: number,
981
+ ): void
982
+ /** 保存绘图上下文。
983
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
984
+ * @example
985
+ * ```tsx
986
+ * const ctx = Taro.createCanvasContext('myCanvas')
987
+ * // save the default fill style
988
+ * ctx.save()
989
+ * ctx.setFillStyle('red')
990
+ * ctx.fillRect(10, 10, 150, 100)
991
+ * // restore to the previous saved state
992
+ * ctx.restore()
993
+ * ctx.fillRect(50, 50, 150, 100)
994
+ * ctx.draw()
995
+ * ```
996
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.save.html
997
+ */
998
+ save(): void
999
+ /** 在调用后,之后创建的路径其横纵坐标会被缩放。多次调用倍数会相乘。
1000
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1001
+ * @example
1002
+ * ```tsx
1003
+ * const ctx = Taro.createCanvasContext('myCanvas')
1004
+ * ctx.strokeRect(10, 10, 25, 15)
1005
+ * ctx.scale(2, 2)
1006
+ * ctx.strokeRect(10, 10, 25, 15)
1007
+ * ctx.scale(2, 2)
1008
+ * ctx.strokeRect(10, 10, 25, 15)
1009
+ * ctx.draw()
1010
+ * ```
1011
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.scale.html
1012
+ */
1013
+ scale(
1014
+ /** 横坐标缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) */
1015
+ scaleWidth: number,
1016
+ /** 纵坐标轴缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) */
1017
+ scaleHeight: number,
1018
+ ): void
1019
+ /** 设置填充色。
1020
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1021
+ * @example
1022
+ * ```tsx
1023
+ * const ctx = Taro.createCanvasContext('myCanvas')
1024
+ * ctx.setFillStyle('red')
1025
+ * ctx.fillRect(10, 10, 150, 75)
1026
+ * ctx.draw()
1027
+ * ```
1028
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html
1029
+ */
1030
+ setFillStyle(
1031
+ /** 填充的颜色,默认颜色为 black。 */
1032
+ color: string | CanvasGradient,
1033
+ ): void
1034
+ /** 设置字体的字号
1035
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1036
+ * @example
1037
+ * ```tsx
1038
+ * const ctx = Taro.createCanvasContext('myCanvas')
1039
+ * ctx.setFontSize(20)
1040
+ * ctx.fillText('20', 20, 20)
1041
+ * ctx.setFontSize(30)
1042
+ * ctx.fillText('30', 40, 40)
1043
+ * ctx.setFontSize(40)
1044
+ * ctx.fillText('40', 60, 60)
1045
+ * ctx.setFontSize(50)
1046
+ * ctx.fillText('50', 90, 90)
1047
+ * ctx.draw()
1048
+ * ```
1049
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFontSize.html
1050
+ */
1051
+ setFontSize(
1052
+ /** 字体的字号 */
1053
+ fontSize: number,
1054
+ ): void
1055
+ /** 设置全局画笔透明度。
1056
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1057
+ * @example
1058
+ * ```tsx
1059
+ * const ctx = Taro.createCanvasContext('myCanvas')
1060
+ * ctx.setFillStyle('red')
1061
+ * ctx.fillRect(10, 10, 150, 100)
1062
+ * ctx.setGlobalAlpha(0.2)
1063
+ * ctx.setFillStyle('blue')
1064
+ * ctx.fillRect(50, 50, 150, 100)
1065
+ * ctx.setFillStyle('yellow')
1066
+ * ctx.fillRect(100, 100, 150, 100)
1067
+ * ctx.draw()
1068
+ * ```
1069
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setGlobalAlpha.html
1070
+ */
1071
+ setGlobalAlpha(
1072
+ /** 透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */
1073
+ alpha: number,
1074
+ ): void
1075
+ /** 设置线条的端点样式
1076
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1077
+ * @example
1078
+ * ```tsx
1079
+ * const ctx = Taro.createCanvasContext('myCanvas')
1080
+ * ctx.beginPath()
1081
+ * ctx.moveTo(10, 10)
1082
+ * ctx.lineTo(150, 10)
1083
+ * ctx.stroke()
1084
+ * ctx.beginPath()
1085
+ * ctx.setLineCap('butt')
1086
+ * ctx.setLineWidth(10)
1087
+ * ctx.moveTo(10, 30)
1088
+ * ctx.lineTo(150, 30)
1089
+ * ctx.stroke()
1090
+ * ctx.beginPath()
1091
+ * ctx.setLineCap('round')
1092
+ * ctx.setLineWidth(10)
1093
+ * ctx.moveTo(10, 50)
1094
+ * ctx.lineTo(150, 50)
1095
+ * ctx.stroke()
1096
+ * ctx.beginPath()
1097
+ * ctx.setLineCap('square')
1098
+ * ctx.setLineWidth(10)
1099
+ * ctx.moveTo(10, 70)
1100
+ * ctx.lineTo(150, 70)
1101
+ * ctx.stroke()
1102
+ * ctx.draw()
1103
+ * ```
1104
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html
1105
+ */
1106
+ setLineCap(
1107
+ /** 线条的结束端点样式 */
1108
+ lineCap: keyof CanvasContext.LineCap,
1109
+ ): void
1110
+ /** 设置虚线样式。
1111
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1112
+ * @example
1113
+ * ```tsx
1114
+ * const ctx = Taro.createCanvasContext('myCanvas')
1115
+ * ctx.setLineDash([10, 20], 5);
1116
+ * ctx.beginPath();
1117
+ * ctx.moveTo(0,100);
1118
+ * ctx.lineTo(400, 100);
1119
+ * ctx.stroke();
1120
+ * ctx.draw()
1121
+ * ```
1122
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineDash.html
1123
+ */
1124
+ setLineDash(
1125
+ /** 一组描述交替绘制线段和间距(坐标空间单位)长度的数字 */
1126
+ pattern: number[],
1127
+ /** 虚线偏移量 */
1128
+ offset: number,
1129
+ ): void
1130
+ /** 设置线条的交点样式
1131
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1132
+ * @example
1133
+ * ```tsx
1134
+ * const ctx = Taro.createCanvasContext('myCanvas')
1135
+ * ctx.beginPath()
1136
+ * ctx.moveTo(10, 10)
1137
+ * ctx.lineTo(100, 50)
1138
+ * ctx.lineTo(10, 90)
1139
+ * ctx.stroke()
1140
+ * ctx.beginPath()
1141
+ * ctx.setLineJoin('bevel')
1142
+ * ctx.setLineWidth(10)
1143
+ * ctx.moveTo(50, 10)
1144
+ * ctx.lineTo(140, 50)
1145
+ * ctx.lineTo(50, 90)
1146
+ * ctx.stroke()
1147
+ * ctx.beginPath()
1148
+ * ctx.setLineJoin('round')
1149
+ * ctx.setLineWidth(10)
1150
+ * ctx.moveTo(90, 10)
1151
+ * ctx.lineTo(180, 50)
1152
+ * ctx.lineTo(90, 90)
1153
+ * ctx.stroke()
1154
+ * ctx.beginPath()
1155
+ * ctx.setLineJoin('miter')
1156
+ * ctx.setLineWidth(10)
1157
+ * ctx.moveTo(130, 10)
1158
+ * ctx.lineTo(220, 50)
1159
+ * ctx.lineTo(130, 90)
1160
+ * ctx.stroke()
1161
+ * ctx.draw()
1162
+ * ```
1163
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html
1164
+ */
1165
+ setLineJoin(
1166
+ /** 线条的结束交点样式 */
1167
+ lineJoin: keyof CanvasContext.LineJoin,
1168
+ ): void
1169
+ /** 设置线条的宽度
1170
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1171
+ * @example
1172
+ * ```tsx
1173
+ * const ctx = Taro.createCanvasContext('myCanvas')
1174
+ * ctx.beginPath()
1175
+ * ctx.moveTo(10, 10)
1176
+ * ctx.lineTo(150, 10)
1177
+ * ctx.stroke()
1178
+ * ctx.beginPath()
1179
+ * ctx.setLineWidth(5)
1180
+ * ctx.moveTo(10, 30)
1181
+ * ctx.lineTo(150, 30)
1182
+ * ctx.stroke()
1183
+ * ctx.beginPath()
1184
+ * ctx.setLineWidth(10)
1185
+ * ctx.moveTo(10, 50)
1186
+ * ctx.lineTo(150, 50)
1187
+ * ctx.stroke()
1188
+ * ctx.beginPath()
1189
+ * ctx.setLineWidth(15)
1190
+ * ctx.moveTo(10, 70)
1191
+ * ctx.lineTo(150, 70)
1192
+ * ctx.stroke()
1193
+ * ctx.draw()
1194
+ * ```
1195
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineWidth.html
1196
+ */
1197
+ setLineWidth(
1198
+ /** 线条的宽度,单位px */
1199
+ lineWidth: number,
1200
+ ): void
1201
+ /** 设置最大斜接长度。斜接长度指的是在两条线交汇处内角和外角之间的距离。当 [CanvasContext.setLineJoin()](/docs/apis/canvas/CanvasContext#setlinejoin) 为 miter 时才有效。超过最大倾斜长度的,连接处将以 lineJoin 为 bevel 来显示。
1202
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1203
+ * @example
1204
+ * ```tsx
1205
+ * const ctx = Taro.createCanvasContext('myCanvas')
1206
+ * ctx.beginPath()
1207
+ * ctx.setLineWidth(10)
1208
+ * ctx.setLineJoin('miter')
1209
+ * ctx.setMiterLimit(1)
1210
+ * ctx.moveTo(10, 10)
1211
+ * ctx.lineTo(100, 50)
1212
+ * ctx.lineTo(10, 90)
1213
+ * ctx.stroke()
1214
+ * ctx.beginPath()
1215
+ * ctx.setLineWidth(10)
1216
+ * ctx.setLineJoin('miter')
1217
+ * ctx.setMiterLimit(2)
1218
+ * ctx.moveTo(50, 10)
1219
+ * ctx.lineTo(140, 50)
1220
+ * ctx.lineTo(50, 90)
1221
+ * ctx.stroke()
1222
+ * ctx.beginPath()
1223
+ * ctx.setLineWidth(10)
1224
+ * ctx.setLineJoin('miter')
1225
+ * ctx.setMiterLimit(3)
1226
+ * ctx.moveTo(90, 10)
1227
+ * ctx.lineTo(180, 50)
1228
+ * ctx.lineTo(90, 90)
1229
+ * ctx.stroke()
1230
+ * ctx.beginPath()
1231
+ * ctx.setLineWidth(10)
1232
+ * ctx.setLineJoin('miter')
1233
+ * ctx.setMiterLimit(4)
1234
+ * ctx.moveTo(130, 10)
1235
+ * ctx.lineTo(220, 50)
1236
+ * ctx.lineTo(130, 90)
1237
+ * ctx.stroke()
1238
+ * ctx.draw()
1239
+ * ```
1240
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html
1241
+ */
1242
+ setMiterLimit(
1243
+ /** 最大斜接长度 */
1244
+ miterLimit: number,
1245
+ ): void
1246
+ /** 设定阴影样式。
1247
+ * @supported weapp, alipay, swan, jd, qq, h5, harmony_hybrid
1248
+ * @example
1249
+ * ```tsx
1250
+ * const ctx = Taro.createCanvasContext('myCanvas')
1251
+ * ctx.setFillStyle('red')
1252
+ * ctx.setShadow(10, 50, 50, 'blue')
1253
+ * ctx.fillRect(10, 10, 150, 75)
1254
+ * ctx.draw()
1255
+ * ```
1256
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setShadow.html
1257
+ */
1258
+ setShadow(
1259
+ /** 阴影相对于形状在水平方向的偏移,默认值为 0。 */
1260
+ offsetX: number,
1261
+ /** 阴影相对于形状在竖直方向的偏移,默认值为 0。 */
1262
+ offsetY: number,
1263
+ /** 阴影的模糊级别,数值越大越模糊。范围 0- 100。,默认值为 0。 */
1264
+ blur: number,
1265
+ /** 阴影的颜色。默认值为 black。 */
1266
+ color: string,
1267
+ ): void
1268
+ /** 设置描边颜色。
1269
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1270
+ * @example
1271
+ * ```tsx
1272
+ * const ctx = Taro.createCanvasContext('myCanvas')
1273
+ * ctx.setStrokeStyle('red')
1274
+ * ctx.strokeRect(10, 10, 150, 75)
1275
+ * ctx.draw()
1276
+ * ```
1277
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html
1278
+ */
1279
+ setStrokeStyle(
1280
+ /** 描边的颜色,默认颜色为 black。 */
1281
+ color: string | CanvasGradient,
1282
+ ): void
1283
+ /** 设置文字的对齐
1284
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1285
+ * @example
1286
+ * ```tsx
1287
+ * const ctx = Taro.createCanvasContext('myCanvas')
1288
+ * ctx.setStrokeStyle('red')
1289
+ * ctx.moveTo(150, 20)
1290
+ * ctx.lineTo(150, 170)
1291
+ * ctx.stroke()
1292
+ * ctx.setFontSize(15)
1293
+ * ctx.setTextAlign('left')
1294
+ * ctx.fillText('textAlign=left', 150, 60)
1295
+ * await ctx.draw(true)
1296
+ * ctx.setTextAlign('center')
1297
+ * ctx.fillText('textAlign=center', 150, 80)
1298
+ * await ctx.draw(true)
1299
+ * ctx.setTextAlign('right')
1300
+ * ctx.fillText('textAlign=right', 150, 100)
1301
+ * await ctx.draw(true)
1302
+ * ```
1303
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextAlign.html
1304
+ */
1305
+ setTextAlign(
1306
+ /** 文字的对齐方式 */
1307
+ align: keyof CanvasContext.Align,
1308
+ ): void
1309
+ /** 设置文字的竖直对齐
1310
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1311
+ * @example
1312
+ * ```tsx
1313
+ * const ctx = Taro.createCanvasContext('myCanvas')
1314
+ * ctx.setStrokeStyle('red')
1315
+ * ctx.moveTo(5, 75)
1316
+ * ctx.lineTo(295, 75)
1317
+ * ctx.stroke()
1318
+ * ctx.setFontSize(20)
1319
+ * ctx.setTextBaseline('top')
1320
+ * ctx.fillText('top', 5, 75)
1321
+ * await ctx.draw(true)
1322
+ * ctx.setTextBaseline('middle')
1323
+ * ctx.fillText('middle', 50, 75)
1324
+ * await ctx.draw(true)
1325
+ * ctx.setTextBaseline('bottom')
1326
+ * ctx.fillText('bottom', 120, 75)
1327
+ * await ctx.draw(true)
1328
+ * ctx.setTextBaseline('normal')
1329
+ * ctx.fillText('normal', 200, 75)
1330
+ * await ctx.draw(true)
1331
+ * ```
1332
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextBaseline.html
1333
+ */
1334
+ setTextBaseline(
1335
+ /** 文字的竖直对齐方式 */
1336
+ textBaseline: keyof CanvasContext.TextBaseline,
1337
+ ): void
1338
+ /** 使用矩阵重新设置(覆盖)当前变换的方法
1339
+ * @supported weapp, swan, jd, tt, h5, harmony_hybrid
1340
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTransform.html
1341
+ */
1342
+ setTransform(
1343
+ /** 水平缩放 */
1344
+ scaleX: number,
1345
+ /** 水平倾斜 */
1346
+ skewX: number,
1347
+ /** 垂直倾斜 */
1348
+ skewY: number,
1349
+ /** 垂直缩放 */
1350
+ scaleY: number,
1351
+ /** 水平移动 */
1352
+ translateX: number,
1353
+ /** 垂直移动 */
1354
+ translateY: number,
1355
+ ): void
1356
+ /** 使用矩阵重新设置(覆盖)当前变换的方法
1357
+ * @supported alipay
1358
+ * @see https://opendocs.alipay.com/mini/api/wt6glg?pathHash=1d428fc1
1359
+ */
1360
+ setTransform(
1361
+ /** 水平缩放 */
1362
+ scaleX: number,
1363
+ /** 垂直倾斜 */
1364
+ skewY: number,
1365
+ /** 水平倾斜 */
1366
+ skewX: number,
1367
+ /** 垂直缩放 */
1368
+ scaleY: number,
1369
+ /** 水平移动 */
1370
+ translateX: number,
1371
+ /** 垂直移动 */
1372
+ translateY: number,
1373
+ ): void
1374
+ /** 使用矩阵重新设置(覆盖)当前变换的方法
1375
+ * @supported qq
1376
+ * @see https://q.qq.com/wiki/develop/miniprogram/API/canvas/canvasContext.html#settransform
1377
+ */
1378
+ setTransform(
1379
+ /** 水平缩放 */
1380
+ scaleX: number,
1381
+ /** 垂直缩放 */
1382
+ scaleY: number,
1383
+ /** 水平倾斜 */
1384
+ skewX: number,
1385
+ /** 垂直倾斜 */
1386
+ skewY: number,
1387
+ /** 水平移动 */
1388
+ translateX: number,
1389
+ /** 垂直移动 */
1390
+ translateY: number,
1391
+ ): void
1392
+ /** 画出当前路径的边框。默认颜色色为黑色。
1393
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1394
+ * @example
1395
+ * ```tsx
1396
+ * const ctx = Taro.createCanvasContext('myCanvas')
1397
+ * ctx.moveTo(10, 10)
1398
+ * ctx.lineTo(100, 10)
1399
+ * ctx.lineTo(100, 100)
1400
+ * ctx.stroke()
1401
+ * ctx.draw()
1402
+ * ```
1403
+ * @example
1404
+ * stroke() 描绘的的路径是从 beginPath() 开始计算,但是不会将 strokeRect() 包含进去。
1405
+ *
1406
+ * ```tsx
1407
+ * const ctx = Taro.createCanvasContext('myCanvas')
1408
+ * // begin path
1409
+ * ctx.rect(10, 10, 100, 30)
1410
+ * ctx.setStrokeStyle('yellow')
1411
+ * ctx.stroke()
1412
+ * // begin another path
1413
+ * ctx.beginPath()
1414
+ * ctx.rect(10, 40, 100, 30)
1415
+ * // only stoke this rect, not in current path
1416
+ * ctx.setStrokeStyle('blue')
1417
+ * ctx.strokeRect(10, 70, 100, 30)
1418
+ * ctx.rect(10, 100, 100, 30)
1419
+ * // it will stroke current path
1420
+ * ctx.setStrokeStyle('red')
1421
+ * ctx.stroke()
1422
+ * ctx.draw()
1423
+ * ```
1424
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.stroke.html
1425
+ */
1426
+ stroke(): void
1427
+ /** 画一个矩形(非填充)。 用 [`setStrokeStyle`](/docs/apis/canvas/CanvasContext#setstrokestyle) 设置矩形线条的颜色,如果没设置默认是黑色。
1428
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1429
+ * @example
1430
+ * ```tsx
1431
+ * const ctx = Taro.createCanvasContext('myCanvas')
1432
+ * ctx.setStrokeStyle('red')
1433
+ * ctx.strokeRect(10, 10, 150, 75)
1434
+ * ctx.draw()
1435
+ * ```
1436
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeRect.html
1437
+ */
1438
+ strokeRect(
1439
+ /** 矩形路径左上角的横坐标 */
1440
+ x: number,
1441
+ /** 矩形路径左上角的纵坐标 */
1442
+ y: number,
1443
+ /** 矩形路径的宽度 */
1444
+ width: number,
1445
+ /** 矩形路径的高度 */
1446
+ height: number,
1447
+ ): void
1448
+ /** 给定的 (x, y) 位置绘制文本描边的方法
1449
+ * @supported weapp, alipay, swan, jd, qq, h5, harmony_hybrid
1450
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeText.html
1451
+ */
1452
+ strokeText(
1453
+ /** 要绘制的文本 */
1454
+ text: string,
1455
+ /** 文本起始点的 x 轴坐标 */
1456
+ x: number,
1457
+ /** 文本起始点的 y 轴坐标 */
1458
+ y: number,
1459
+ /** 需要绘制的最大宽度,可选 */
1460
+ maxWidth?: number,
1461
+ ): void
1462
+ /** 使用矩阵多次叠加当前变换的方法
1463
+ * @supported weapp, jd, tt, h5, harmony_hybrid
1464
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.transform.html
1465
+ */
1466
+ transform(
1467
+ /** 水平缩放 */
1468
+ scaleX: number,
1469
+ /** 水平倾斜 */
1470
+ skewX: number,
1471
+ /** 垂直倾斜 */
1472
+ skewY: number,
1473
+ /** 垂直缩放 */
1474
+ scaleY: number,
1475
+ /** 水平移动 */
1476
+ translateX: number,
1477
+ /** 垂直移动 */
1478
+ translateY: number,
1479
+ ): void
1480
+ /** 使用矩阵叠加当前变换。矩阵由方法的参数进行描述,可以缩放、旋转、移动和倾斜上下文
1481
+ * @supported alipay
1482
+ * @see https://opendocs.alipay.com/mini/api/fv97do?pathHash=42ccd479
1483
+ */
1484
+ transform(
1485
+ /** 水平缩放 */
1486
+ scaleX: number,
1487
+ /** 垂直倾斜 */
1488
+ skewY: number,
1489
+ /** 水平倾斜 */
1490
+ skewX: number,
1491
+ /** 垂直缩放 */
1492
+ scaleY: number,
1493
+ /** 水平移动 */
1494
+ translateX: number,
1495
+ /** 垂直移动 */
1496
+ translateY: number,
1497
+ ): void
1498
+ /** 使用矩阵多次叠加当前变换的方法
1499
+ * @supported qq
1500
+ * @see https://q.qq.com/wiki/develop/miniprogram/API/canvas/canvasContext.html#transform
1501
+ */
1502
+ transform(
1503
+ /** 水平缩放 */
1504
+ scaleX: number,
1505
+ /** 垂直缩放 */
1506
+ scaleY: number,
1507
+ /** 水平倾斜 */
1508
+ skewX: number,
1509
+ /** 垂直倾斜 */
1510
+ skewY: number,
1511
+ /** 水平移动 */
1512
+ translateX: number,
1513
+ /** 垂直移动 */
1514
+ translateY: number,
1515
+ ): void
1516
+ /** 对当前坐标系的原点 (0, 0) 进行变换。默认的坐标系原点为页面左上角。
1517
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
1518
+ * @example
1519
+ * ```tsx
1520
+ * const ctx = Taro.createCanvasContext('myCanvas')
1521
+ * ctx.strokeRect(10, 10, 150, 100)
1522
+ * ctx.translate(20, 20)
1523
+ * ctx.strokeRect(10, 10, 150, 100)
1524
+ * ctx.translate(20, 20)
1525
+ * ctx.strokeRect(10, 10, 150, 100)
1526
+ * ctx.draw()
1527
+ * ```
1528
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.translate.html
1529
+ */
1530
+ translate(
1531
+ /** 水平坐标平移量 */
1532
+ x: number,
1533
+ /** 竖直坐标平移量 */
1534
+ y: number,
1535
+ ): void
1536
+ }
1537
+ namespace CanvasContext {
1538
+ /** 参数 repetition 可选值 */
1539
+ interface Repetition {
1540
+ /** 水平竖直方向都重复 */
1541
+ 'repeat'
1542
+ /** 水平方向重复 */
1543
+ 'repeat-x'
1544
+ /** 竖直方向重复 */
1545
+ 'repeat-y'
1546
+ /** 不重复 */
1547
+ 'no-repeat'
1548
+ }
1549
+
1550
+ /** 参数 lineCap 可选值 */
1551
+ interface LineCap {
1552
+ /** 向线条的每个末端添加平直的边缘。 */
1553
+ butt
1554
+ /** 向线条的每个末端添加圆形线帽。 */
1555
+ round
1556
+ /** 向线条的每个末端添加正方形线帽。 */
1557
+ square
1558
+ }
1559
+ /** 参数 lineJoin 可选值 */
1560
+ interface LineJoin {
1561
+ /** 斜角 */
1562
+ bevel
1563
+ /** 圆角 */
1564
+ round
1565
+ /** 尖角 */
1566
+ miter
1567
+ }
1568
+ /** 参数 align 可选值 */
1569
+ interface Align {
1570
+ /** 左对齐 */
1571
+ left
1572
+ /** 居中对齐 */
1573
+ center
1574
+ /** 右对齐 */
1575
+ right
1576
+ }
1577
+ /** 参数 textBaseline 可选值 */
1578
+ interface TextBaseline {
1579
+ /** 顶部对齐
1580
+ * @supported weapp, alipay, swan, jd, qq, tt, h5
1581
+ */
1582
+ top
1583
+ /** 底部对齐
1584
+ * @supported weapp, alipay, swan, jd, qq, tt, h5
1585
+ */
1586
+ bottom
1587
+ /** 居中对齐
1588
+ * @supported weapp, alipay, swan, jd, qq, tt, h5
1589
+ */
1590
+ middle
1591
+ /**
1592
+ * @supported weapp, alipay, swan, jd, qq, tt, h5
1593
+ */
1594
+ normal
1595
+ /** 文本基线为悬挂基线。
1596
+ * @supported alipay, tt, h5
1597
+ */
1598
+ hanging
1599
+ /** 文本基线是标准的字母基线
1600
+ * @supported alipay, tt, h5
1601
+ */
1602
+ alphabetic
1603
+ /** 文字基线是表意字基线。如果字符本身超出了alphabetic 基线,那么ideograhpic基线位置在字符本身的底部。
1604
+ * @supported alipay, tt, h5
1605
+ */
1606
+ ideographic
1607
+ }
1608
+ }
1609
+
1610
+ /** 创建 canvas 的绘图上下文 CanvasContext 对象
1611
+ * @supported weapp
1612
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html
1613
+ */
1614
+ interface CanvasGradient {
1615
+ /** 添加颜色的渐变点。小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染
1616
+ * @supported weapp, alipay, swan, jd, qq, tt
1617
+ * @example
1618
+ * ```tsx
1619
+ * const ctx = Taro.createCanvasContext('myCanvas')
1620
+ * // Create circular gradient
1621
+ * const grd = ctx.createLinearGradient(30, 10, 120, 10)
1622
+ * grd.addColorStop(0, 'red')
1623
+ * grd.addColorStop(0.16, 'orange')
1624
+ * grd.addColorStop(0.33, 'yellow')
1625
+ * grd.addColorStop(0.5, 'green')
1626
+ * grd.addColorStop(0.66, 'cyan')
1627
+ * grd.addColorStop(0.83, 'blue')
1628
+ * grd.addColorStop(1, 'purple')
1629
+ * // Fill with gradient
1630
+ * ctx.setFillStyle(grd)
1631
+ * ctx.fillRect(10, 10, 150, 80)
1632
+ * ctx.draw()
1633
+ * ```
1634
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html
1635
+ */
1636
+ addColorStop(
1637
+ /** 表示渐变中开始与结束之间的位置,范围 0-1。 */
1638
+ stop: number,
1639
+ /** 渐变点的颜色。 */
1640
+ color: string,
1641
+ ): void
1642
+ }
1643
+
1644
+ /** 颜色。可以用以下几种方式来表示 canvas 中使用的颜色:
1645
+ *
1646
+ * - RGB 颜色: 如 `'rgb(255, 0, 0)'`
1647
+ * - RGBA 颜色:如 `'rgba(255, 0, 0, 0.3)'`
1648
+ * - 16 进制颜色: 如 `'#FF0000'`
1649
+ * - 预定义的颜色: 如 `'red'`
1650
+ *
1651
+ * 其中预定义颜色有以下148个:
1652
+ * *注意**: Color Name 大小写不敏感
1653
+ *
1654
+ * | Color Name | HEX |
1655
+ * | -------------------- | ------- |
1656
+ * | AliceBlue | #F0F8FF |
1657
+ * | AntiqueWhite | #FAEBD7 |
1658
+ * | Aqua | #00FFFF |
1659
+ * | Aquamarine | #7FFFD4 |
1660
+ * | Azure | #F0FFFF |
1661
+ * | Beige | #F5F5DC |
1662
+ * | Bisque | #FFE4C4 |
1663
+ * | Black | #000000 |
1664
+ * | BlanchedAlmond | #FFEBCD |
1665
+ * | Blue | #0000FF |
1666
+ * | BlueViolet | #8A2BE2 |
1667
+ * | Brown | #A52A2A |
1668
+ * | BurlyWood | #DEB887 |
1669
+ * | CadetBlue | #5F9EA0 |
1670
+ * | Chartreuse | #7FFF00 |
1671
+ * | Chocolate | #D2691E |
1672
+ * | Coral | #FF7F50 |
1673
+ * | CornflowerBlue | #6495ED |
1674
+ * | Cornsilk | #FFF8DC |
1675
+ * | Crimson | #DC143C |
1676
+ * | Cyan | #00FFFF |
1677
+ * | DarkBlue | #00008B |
1678
+ * | DarkCyan | #008B8B |
1679
+ * | DarkGoldenRod | #B8860B |
1680
+ * | DarkGray | #A9A9A9 |
1681
+ * | DarkGrey | #A9A9A9 |
1682
+ * | DarkGreen | #006400 |
1683
+ * | DarkKhaki | #BDB76B |
1684
+ * | DarkMagenta | #8B008B |
1685
+ * | DarkOliveGreen | #556B2F |
1686
+ * | DarkOrange | #FF8C00 |
1687
+ * | DarkOrchid | #9932CC |
1688
+ * | DarkRed | #8B0000 |
1689
+ * | DarkSalmon | #E9967A |
1690
+ * | DarkSeaGreen | #8FBC8F |
1691
+ * | DarkSlateBlue | #483D8B |
1692
+ * | DarkSlateGray | #2F4F4F |
1693
+ * | DarkSlateGrey | #2F4F4F |
1694
+ * | DarkTurquoise | #00CED1 |
1695
+ * | DarkViolet | #9400D3 |
1696
+ * | DeepPink | #FF1493 |
1697
+ * | DeepSkyBlue | #00BFFF |
1698
+ * | DimGray | #696969 |
1699
+ * | DimGrey | #696969 |
1700
+ * | DodgerBlue | #1E90FF |
1701
+ * | FireBrick | #B22222 |
1702
+ * | FloralWhite | #FFFAF0 |
1703
+ * | ForestGreen | #228B22 |
1704
+ * | Fuchsia | #FF00FF |
1705
+ * | Gainsboro | #DCDCDC |
1706
+ * | GhostWhite | #F8F8FF |
1707
+ * | Gold | #FFD700 |
1708
+ * | GoldenRod | #DAA520 |
1709
+ * | Gray | #808080 |
1710
+ * | Grey | #808080 |
1711
+ * | Green | #008000 |
1712
+ * | GreenYellow | #ADFF2F |
1713
+ * | HoneyDew | #F0FFF0 |
1714
+ * | HotPink | #FF69B4 |
1715
+ * | IndianRed | #CD5C5C |
1716
+ * | Indigo | #4B0082 |
1717
+ * | Ivory | #FFFFF0 |
1718
+ * | Khaki | #F0E68C |
1719
+ * | Lavender | #E6E6FA |
1720
+ * | LavenderBlush | #FFF0F5 |
1721
+ * | LawnGreen | #7CFC00 |
1722
+ * | LemonChiffon | #FFFACD |
1723
+ * | LightBlue | #ADD8E6 |
1724
+ * | LightCoral | #F08080 |
1725
+ * | LightCyan | #E0FFFF |
1726
+ * | LightGoldenRodYellow | #FAFAD2 |
1727
+ * | LightGray | #D3D3D3 |
1728
+ * | LightGrey | #D3D3D3 |
1729
+ * | LightGreen | #90EE90 |
1730
+ * | LightPink | #FFB6C1 |
1731
+ * | LightSalmon | #FFA07A |
1732
+ * | LightSeaGreen | #20B2AA |
1733
+ * | LightSkyBlue | #87CEFA |
1734
+ * | LightSlateGray | #778899 |
1735
+ * | LightSlateGrey | #778899 |
1736
+ * | LightSteelBlue | #B0C4DE |
1737
+ * | LightYellow | #FFFFE0 |
1738
+ * | Lime | #00FF00 |
1739
+ * | LimeGreen | #32CD32 |
1740
+ * | Linen | #FAF0E6 |
1741
+ * | Magenta | #FF00FF |
1742
+ * | Maroon | #800000 |
1743
+ * | MediumAquaMarine | #66CDAA |
1744
+ * | MediumBlue | #0000CD |
1745
+ * | MediumOrchid | #BA55D3 |
1746
+ * | MediumPurple | #9370DB |
1747
+ * | MediumSeaGreen | #3CB371 |
1748
+ * | MediumSlateBlue | #7B68EE |
1749
+ * | MediumSpringGreen | #00FA9A |
1750
+ * | MediumTurquoise | #48D1CC |
1751
+ * | MediumVioletRed | #C71585 |
1752
+ * | MidnightBlue | #191970 |
1753
+ * | MintCream | #F5FFFA |
1754
+ * | MistyRose | #FFE4E1 |
1755
+ * | Moccasin | #FFE4B5 |
1756
+ * | NavajoWhite | #FFDEAD |
1757
+ * | Navy | #000080 |
1758
+ * | OldLace | #FDF5E6 |
1759
+ * | Olive | #808000 |
1760
+ * | OliveDrab | #6B8E23 |
1761
+ * | Orange | #FFA500 |
1762
+ * | OrangeRed | #FF4500 |
1763
+ * | Orchid | #DA70D6 |
1764
+ * | PaleGoldenRod | #EEE8AA |
1765
+ * | PaleGreen | #98FB98 |
1766
+ * | PaleTurquoise | #AFEEEE |
1767
+ * | PaleVioletRed | #DB7093 |
1768
+ * | PapayaWhip | #FFEFD5 |
1769
+ * | PeachPuff | #FFDAB9 |
1770
+ * | Peru | #CD853F |
1771
+ * | Pink | #FFC0CB |
1772
+ * | Plum | #DDA0DD |
1773
+ * | PowderBlue | #B0E0E6 |
1774
+ * | Purple | #800080 |
1775
+ * | RebeccaPurple | #663399 |
1776
+ * | Red | #FF0000 |
1777
+ * | RosyBrown | #BC8F8F |
1778
+ * | RoyalBlue | #4169E1 |
1779
+ * | SaddleBrown | #8B4513 |
1780
+ * | Salmon | #FA8072 |
1781
+ * | SandyBrown | #F4A460 |
1782
+ * | SeaGreen | #2E8B57 |
1783
+ * | SeaShell | #FFF5EE |
1784
+ * | Sienna | #A0522D |
1785
+ * | Silver | #C0C0C0 |
1786
+ * | SkyBlue | #87CEEB |
1787
+ * | SlateBlue | #6A5ACD |
1788
+ * | SlateGray | #708090 |
1789
+ * | SlateGrey | #708090 |
1790
+ * | Snow | #FFFAFA |
1791
+ * | SpringGreen | #00FF7F |
1792
+ * | SteelBlue | #4682B4 |
1793
+ * | Tan | #D2B48C |
1794
+ * | Teal | #008080 |
1795
+ * | Thistle | #D8BFD8 |
1796
+ * | Tomato | #FF6347 |
1797
+ * | Turquoise | #40E0D0 |
1798
+ * | Violet | #EE82EE |
1799
+ * | Wheat | #F5DEB3 |
1800
+ * | White | #FFFFFF |
1801
+ * | WhiteSmoke | #F5F5F5 |
1802
+ * | Yellow | #FFFF00 |
1803
+ * | YellowGreen | #9ACD32 |
1804
+ * @supported weapp
1805
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Color.html
1806
+ */
1807
+ interface Color {}
1808
+
1809
+ /** 图片对象
1810
+ * @supported weapp
1811
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Image.html
1812
+ */
1813
+ interface Image {
1814
+ /** 图片的 URL */
1815
+ src: string
1816
+ /** 图片的真实高度 */
1817
+ height: number
1818
+ /** 图片的真实宽度 */
1819
+ width: number
1820
+ /** origin: 发送完整的referrer; no-referrer: 不发送。
1821
+ *
1822
+ * 格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本
1823
+ * @supported weapp
1824
+ */
1825
+ referrerPolicy: string
1826
+ /** 图片加载发生错误后触发的回调函数 */
1827
+ onerror: (...args: any[]) => any
1828
+ /** 图片加载完成后触发的回调函数 */
1829
+ onload: (...args: any[]) => any
1830
+ }
1831
+
1832
+ /** ImageData 对象
1833
+ * @supported weapp
1834
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/ImageData.html
1835
+ */
1836
+ interface ImageData {
1837
+ /** 使用像素描述 ImageData 的实际宽度 */
1838
+ width: number
1839
+ /** 使用像素描述 ImageData 的实际高度 */
1840
+ height: number
1841
+ /** 一维数组,包含以 RGBA 顺序的数据,数据使用 0 至 255(包含)的整数表示 */
1842
+ data: Uint8ClampedArray
1843
+ }
1844
+
1845
+ /** 离屏 canvas 实例,可通过 Taro.createOffscreenCanvas 创建。
1846
+ * @supported weapp
1847
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.html
1848
+ */
1849
+ interface OffscreenCanvas {
1850
+ /** 画布宽度 */
1851
+ width: number
1852
+ /** 画布高度 */
1853
+ height: number
1854
+ /** 创建一个图片对象。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法
1855
+ *
1856
+ * > 注意不允许混用 webgl 和 2d 画布创建的图片对象,使用时请注意尽量使用 canvas 自身的 createImage 创建图片对象。
1857
+ * @supported weapp
1858
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.createImage.html
1859
+ */
1860
+ createImage(): Image
1861
+ /** 该方法返回 OffscreenCanvas 的绘图上下文
1862
+ *
1863
+ * > 当前仅支持获取 WebGL 绘图上下文
1864
+ * @supported weapp, tt
1865
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.getContext.html
1866
+ */
1867
+ getContext(contextType: 'webgl' | '2d'): RenderingContext
1868
+ }
1869
+
1870
+ /** Canvas 2D API 的接口 Path2D 用来声明路径,此路径稍后会被CanvasRenderingContext2D 对象使用。CanvasRenderingContext2D 接口的 路径方法 也存在于 Path2D 这个接口中,允许你在 canvas 中根据需要创建可以保留并重用的路径。
1871
+ * @supported weapp
1872
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html
1873
+ */
1874
+ interface Path2D {
1875
+ /** 添加路径到当前路径。
1876
+ * @supported weapp
1877
+ */
1878
+ addPath(
1879
+ /** 添加的 Path2D 路径 */
1880
+ path: Path2D
1881
+ ): void
1882
+ /** 添加一段圆弧路径
1883
+ * @supported weapp
1884
+ */
1885
+ arc(
1886
+ /** 圆心横坐标 */
1887
+ x: number,
1888
+ /** 圆心纵坐标 */
1889
+ y: number,
1890
+ /** 圆形半径,必须为正数 */
1891
+ radius: number,
1892
+ /** 圆弧开始角度 */
1893
+ startAngle: number,
1894
+ /** 圆弧结束角度 */
1895
+ endAngle: number,
1896
+ /** 是否逆时针绘制。如果传 true, 则会从 endAngle 开始绘制到 startAngle */
1897
+ counterclockwise: boolean
1898
+ ): void
1899
+ /** 通过给定控制点添加一段圆弧路径
1900
+ * @supported weapp
1901
+ */
1902
+ arcTo(
1903
+ /** 第一个控制点横坐标 */
1904
+ x1: number,
1905
+ /** 第一个控制点纵坐标 */
1906
+ y1: number,
1907
+ /** 第二个控制点横坐标 */
1908
+ x2: number,
1909
+ /** 第二个控制点纵坐标 */
1910
+ y2: number,
1911
+ /** 圆形半径,必须为非负数 */
1912
+ radius: number
1913
+ ): void
1914
+ /** 添加三次贝塞尔曲线路径
1915
+ * @supported weapp
1916
+ */
1917
+ bezierCurveTo(
1918
+ /** 第一个控制点横坐标 */
1919
+ cp1x: number,
1920
+ /** 第一个控制点纵坐标 */
1921
+ cp1y: number,
1922
+ /** 第二个控制点横坐标 */
1923
+ cp2x: number,
1924
+ /** 第二个控制点纵坐标 */
1925
+ cp2y: number,
1926
+ /** 结束点横坐标 */
1927
+ x: number,
1928
+ /** 结束点纵坐标 */
1929
+ y: number
1930
+ ): void
1931
+ /** 闭合路径到起点
1932
+ * @supported weapp
1933
+ */
1934
+ closePath(): void
1935
+ /** 添加椭圆弧路径
1936
+ * @supported weapp
1937
+ */
1938
+ ellipse(
1939
+ /** 椭圆圆心横坐标 */
1940
+ x: number,
1941
+ /** 椭圆圆心纵坐标 */
1942
+ y: number,
1943
+ /** 椭圆长轴半径,必须为非负数 */
1944
+ radiusX: number,
1945
+ /** 椭圆短轴半径,必须为非负数 */
1946
+ radiusY: number,
1947
+ /** 椭圆旋转角度 */
1948
+ rotation: number,
1949
+ /** 圆弧开始角度 */
1950
+ startAngle: number,
1951
+ /** 圆弧结束角度 */
1952
+ endAngle: number,
1953
+ /** 是否逆时针绘制。如果传 true, 则会从 endAngle 开始绘制到 startAngle */
1954
+ counterclockwise: boolean
1955
+ ): void
1956
+ /** 添加直线路径
1957
+ * @supported weapp
1958
+ */
1959
+ lineTo(
1960
+ /** 结束点横坐标 */
1961
+ x: number,
1962
+ /** 结束点纵坐标 */
1963
+ y: number
1964
+ ): void
1965
+ /** 移动路径开始点
1966
+ * @supported weapp
1967
+ */
1968
+ moveTo(
1969
+ /** 横坐标 */
1970
+ x: number,
1971
+ /** 纵坐标 */
1972
+ y: number
1973
+ ): void
1974
+ /** 添加二次贝塞尔曲线路径
1975
+ * @supported weapp
1976
+ */
1977
+ quadraticCurveTo(
1978
+ /** 控制点横坐标 */
1979
+ cpx: number,
1980
+ /** 控制点纵坐标 */
1981
+ cpy: number,
1982
+ /** 结束点横坐标 */
1983
+ x: number,
1984
+ /** 结束点纵坐标 */
1985
+ y: number
1986
+ ): void
1987
+ /** 添加方形路径
1988
+ * @supported weapp
1989
+ */
1990
+ rect(
1991
+ /** 开始点横坐标 */
1992
+ x: number,
1993
+ /** 开始点纵坐标 */
1994
+ y: number,
1995
+ /** 方形宽度,正数向右,负数向左 */
1996
+ width: number,
1997
+ /** 方形高度,正数向下,负数向上 */
1998
+ height: number
1999
+ ): void
2000
+ }
2001
+
2002
+ /** Canvas 绘图上下文。
2003
+ *
2004
+ * ****
2005
+ *
2006
+ * - 通过 Canvas.getContext('2d') 接口可以获取 CanvasRenderingContext2D 对象,实现了 [HTML Canvas 2D Context](https://www.w3.org/TR/2dcontext/) 定义的属性、方法。
2007
+ * - 通过 Canvas.getContext('webgl') 或 OffscreenCanvas.getContext('webgl') 接口可以获取 WebGLRenderingContext 对象,实现了 [WebGL 1.0](https://www.khronos.org/registry/webgl/specs/latest/1.0/) 定义的所有属性、方法、常量。
2008
+ * - CanvasRenderingContext2D 的 drawImage 方法 2.10.0 起支持传入通过 SelectorQuery 获取的 video 对象,2.29.0 起支持传入开启了自定义渲染的 LivePusherContext 对象。
2009
+ * @supported weapp, alipay, tt
2010
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html
2011
+ */
2012
+ interface RenderingContext {}
2013
+
2014
+ interface TaroStatic {
2015
+ /** 创建离屏 canvas 实例
2016
+ * @supported weapp, tt
2017
+ * @example
2018
+ * ```tsx
2019
+ * // 创建离屏 2D canvas 实例
2020
+ * const canvas = Taro.createOffscreenCanvas({type: '2d', width: 300, height: 150})
2021
+ * // 获取 context。注意这里必须要与创建时的 type 一致
2022
+ * const context = canvas.getContext('2d')
2023
+ *
2024
+ * // 创建一个图片
2025
+ * const image = canvas.createImage()
2026
+ * // 等待图片加载
2027
+ * await new Promise(resolve => {
2028
+ * image.onload = resolve
2029
+ * image.src = IMAGE_URL // 要加载的图片 url
2030
+ * })
2031
+ *
2032
+ * // 把图片画到离屏 canvas 上
2033
+ * context.clearRect(0, 0, 300, 150)
2034
+ * context.drawImage(image, 0, 0, 300, 150)
2035
+ *
2036
+ * // 获取画完后的数据
2037
+ * const imgData = context.getImageData(0, 0, 300, 150)
2038
+ * ```
2039
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html
2040
+ *
2041
+ * 有两个版本的写法:
2042
+ *
2043
+ * - createOffscreenCanvas(options) 从 2.16.1 起支持
2044
+ * - createOffscreenCanvas(width, height, this) 从 2.7.0 起支持
2045
+ */
2046
+ createOffscreenCanvas(options: createOffscreenCanvas.Option): OffscreenCanvas
2047
+
2048
+ /** 创建 canvas 的绘图上下文 [CanvasContext](/docs/apis/canvas/CanvasContext) 对象
2049
+ *
2050
+ * **Tip**: 需要指定 canvasId,该绘图上下文只作用于对应的 `<canvas/>`;另外,Web 端需要在 `useReady` 回调中执行它,否则会因为底层 canvas 渲染出来之前而去获取 CanvasContext,导致其底层的 context 为 `undefined`,从而不能正常绘图。
2051
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid, harmony
2052
+ * @example
2053
+ * ```tsx
2054
+ * import { useReady } from '@spcsn/taro'
2055
+ *
2056
+ * useReady(() => {
2057
+ * const context = Taro.createCanvasContext('canvas')
2058
+ * context.setStrokeStyle("#00ff00")
2059
+ * context.setLineWidth(5)
2060
+ * context.rect(0, 0, 200, 200)
2061
+ * context.stroke()
2062
+ * context.setStrokeStyle("#ff0000")
2063
+ * context.setLineWidth(2)
2064
+ * context.moveTo(160, 100)
2065
+ * context.arc(100, 100, 60, 0, 2 * Math.PI, true)
2066
+ * context.moveTo(140, 100)
2067
+ * context.arc(100, 100, 40, 0, Math.PI, false)
2068
+ * context.moveTo(85, 80)
2069
+ * context.arc(80, 80, 5, 0, 2 * Math.PI, true)
2070
+ * context.moveTo(125, 80)
2071
+ * context.arc(120, 80, 5, 0, 2 * Math.PI, true)
2072
+ * context.stroke()
2073
+ * context.draw()
2074
+ * })
2075
+ * ```
2076
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createCanvasContext.html
2077
+ */
2078
+ createCanvasContext(
2079
+ /** 要获取上下文的 [canvas](/docs/components/canvas) 组件 canvas-id 属性 */
2080
+ canvasId: string,
2081
+ /** 在自定义组件下,当前组件实例的this,表示在这个自定义组件下查找拥有 canvas-id 的 [canvas](/docs/components/canvas) ,如果省略则不在任何自定义组件内查找 */
2082
+ component?: TaroGeneral.IAnyObject,
2083
+ ): CanvasContext
2084
+
2085
+ /** 把当前画布指定区域的内容导出生成指定大小的图片。在 `draw()` 回调里调用该方法才能保证图片导出成功。
2086
+ *
2087
+ * **Bug & Tip:**
2088
+ *
2089
+ * 1. `tip`: 在 `draw` 回调里调用该方法才能保证图片导出成功。
2090
+ * @example
2091
+ * ```tsx
2092
+ * Taro.canvasToTempFilePath({
2093
+ * x: 100,
2094
+ * y: 200,
2095
+ * width: 50,
2096
+ * height: 50,
2097
+ * destWidth: 100,
2098
+ * destHeight: 100,
2099
+ * canvasId: 'myCanvas',
2100
+ * success: function (res) {
2101
+ * console.log(res.tempFilePath)
2102
+ * }
2103
+ * })
2104
+ * ```
2105
+ * @supported weapp, alipay, swan, jd, qq, tt, h5, harmony_hybrid
2106
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html
2107
+ */
2108
+ canvasToTempFilePath(
2109
+ option: canvasToTempFilePath.Option,
2110
+ /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](/docs/components/canvas) 组件 */
2111
+ component?: TaroGeneral.IAnyObject,
2112
+ ): Promise<canvasToTempFilePath.SuccessCallbackResult>
2113
+
2114
+ /** 将像素数据绘制到画布。在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 `<canvas>` 组件
2115
+ * @supported weapp, swan, jd, qq, h5, harmony_hybrid
2116
+ * @example
2117
+ * ```tsx
2118
+ * const data = new Uint8ClampedArray([255, 0, 0, 1])
2119
+ * Taro.canvasPutImageData({
2120
+ * canvasId: 'myCanvas',
2121
+ * x: 0,
2122
+ * y: 0,
2123
+ * width: 1,
2124
+ * data: data,
2125
+ * success: function (res) {}
2126
+ * })
2127
+ * ```
2128
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasPutImageData.html
2129
+ */
2130
+ canvasPutImageData(
2131
+ option: canvasPutImageData.Option,
2132
+ /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](/docs/components/canvas) 组件 */
2133
+ component?: TaroGeneral.IAnyObject,
2134
+ ): Promise<TaroGeneral.CallbackResult>
2135
+
2136
+ /** 获取 canvas 区域隐含的像素数据。
2137
+ * @supported weapp, swan, jd, qq, h5, harmony_hybrid
2138
+ * @example
2139
+ * ```tsx
2140
+ * Taro.canvasGetImageData({
2141
+ * canvasId: 'myCanvas',
2142
+ * x: 0,
2143
+ * y: 0,
2144
+ * width: 100,
2145
+ * height: 100,
2146
+ * success: function (res) {
2147
+ * console.log(res.width) // 100
2148
+ * console.log(res.height) // 100
2149
+ * console.log(res.data instanceof Uint8ClampedArray) // true
2150
+ * console.log(res.data.length) // 100 * 100 * 4
2151
+ * }
2152
+ * })
2153
+ * ```
2154
+ * @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasGetImageData.html
2155
+ */
2156
+ canvasGetImageData(
2157
+ option: canvasGetImageData.Option,
2158
+ /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](/docs/components/canvas) 组件 */
2159
+ component?: TaroGeneral.IAnyObject,
2160
+ ): Promise<canvasGetImageData.SuccessCallbackResult>
2161
+ }
2162
+ }