aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/canvasrenderingcontext2d/index.html
blob: d08ba7ba85df561a8f805ac60ee5dc7b0f1afe4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
---
title: CanvasRenderingContext2D
slug: Web/API/CanvasRenderingContext2D
tags:
  - Canvas
  - CanvasRenderingContext2D
translation_of: Web/API/CanvasRenderingContext2D
---
<p>{{APIRef}}</p>

<p><code><strong>CanvasRenderingContext2D</strong></code>接口是Canvas API的一部分,可为{{HTMLElement("canvas")}}元素的绘图表面提供2D渲染上下文。 它用于绘制形状,文本,图像和其他对象。</p>

<p>请参阅侧边栏和下方的界面属性和方法。 <a href="/zh-CN/docs/Web/API/Canvas_API/Tutorial" title="Canvas tutorial">Canvas教程</a><span style="line-height: inherit;">提供了更多的信息,例子和资源</span></p>

<h2 id="基础示例">基础示例</h2>

<p>要获得<code>CanvasRenderingContext2D</code> 实例,您必须首先具有HTML <code>&lt;canvas&gt;</code>元素才能使用:</p>

<pre class="brush: html notranslate">&lt;canvas id="my-house" width="300" height="300"&gt;&lt;/canvas&gt;
</pre>

<p>要获取画布的2D渲染上下文,请在<code>&lt;canvas&gt;</code>元素上调用{{domxref("HTMLCanvasElement.getContext()", "getContext()")}},并提供<code>'2d'</code>作为参数:</p>

<pre class="brush: js notranslate">const canvas = document.getElementById('my-house');
const ctx = canvas.getContext('2d');
</pre>

<p>有了上下文,您就可以绘制任何喜欢的东西。 此代码绘制了一个房子:</p>

<pre class="brush: js notranslate">// Set line width
ctx.lineWidth = 10;

// Wall
ctx.strokeRect(75, 140, 150, 110);

// Door
ctx.fillRect(130, 190, 40, 60);

// Roof
ctx.beginPath();
ctx.moveTo(50, 140);
ctx.lineTo(150, 60);
ctx.lineTo(250, 140);
ctx.closePath();
ctx.stroke();
</pre>

<p>生成的图形如下所示:</p>

<div class="hidden">
<h2 id="Basic_example">Basic_example</h2>

<h3 id="HTML">HTML</h3>

<pre class="brush: html notranslate">&lt;canvas id="my-house" width="300" height="300"&gt;&lt;/canvas&gt;
</pre>

<h3 id="JavaScript">JavaScript</h3>

<pre class="brush: js notranslate">const canvas = document.getElementById('my-house');
const ctx = canvas.getContext('2d');
// Set line width
ctx.lineWidth = 10;

// Wall
ctx.strokeRect(75, 140, 150, 110);

// Door
ctx.fillRect(130, 190, 40, 60);

// Roof
ctx.beginPath();
ctx.moveTo(50, 140);
ctx.lineTo(150, 60);
ctx.lineTo(250, 140);
ctx.closePath();
ctx.stroke();</pre>

<h3 id="结果">结果</h3>
</div>

<p>{{EmbedLiveSample('Basic_example', 700, 330)}}</p>

<h2 id="绘制矩形" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">绘制矩形</h2>

<p>以下是3个绘制矩形位图的方法。</p>

<p><strong>{{domxref("CanvasRenderingContext2D.clearRect()")}}</strong></p>

<dl>
 <dd>设置指定矩形区域内(以 点 <em>(x, y)</em> 为起点,范围是<em>(width, height)</em> )所有像素变成透明,并擦除之前绘制的所有内容。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.fillRect()")}}</dt>
 <dd>绘制填充矩形,矩形的起点在 <em>(x, y) </em>位置,矩形的尺寸是 <em>width</em> 和 <em>height </em></dd>
 <dt>{{domxref("CanvasRenderingContext2D.strokeRect()")}}</dt>
 <dd>在 canvas 中,使用当前的笔触样式,描绘一个起点在 <em>(x, y)</em> 、宽度为<em> w</em> 、高度为 <em>h</em> 的矩形。</dd>
</dl>

<h2 id="绘制文本" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">绘制文本</h2>

<p>下面是绘制文本的方法。 参见 {{domxref("TextMetrics")}} 对象获取文本属性。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.fillText()")}}</dt>
 <dd>在(x,y)位置绘制(填充)文本。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.strokeText()")}}</dt>
 <dd>在(x,y)位置绘制(描边)文本。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.measureText()")}}</dt>
 <dd>返回 {{domxref("TextMetrics")}} 对象。</dd>
</dl>

<h2 id="线型" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">线型</h2>

<p>下面的方法和属性控制如何绘制线。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.lineWidth")}}</dt>
 <dd>线的宽度。默认 <code>1.0</code></dd>
 <dt>{{domxref("CanvasRenderingContext2D.lineCap")}}</dt>
 <dd>线末端的类型。 允许的值: <code>butt</code> (默认), <code>round</code><code>square</code>.</dd>
 <dt>{{domxref("CanvasRenderingContext2D.lineJoin")}}</dt>
 <dd>定义两线相交拐点的类型。允许的值:<code style="font-style: normal;">round</code><code style="font-style: normal;">bevel</code><code style="font-style: normal;">miter</code>(默认)。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.miterLimit")}}</dt>
 <dd>斜接面限制比例。默认 <code>10。</code></dd>
 <dt>{{domxref("CanvasRenderingContext2D.getLineDash()")}}</dt>
 <dd>返回当前线段样式的数组,数组包含一组数量为偶数的非负数数字。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.setLineDash()")}}</dt>
 <dd>设置当前的线段样式。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.lineDashOffset")}}</dt>
 <dd>描述在哪里开始绘制线段。</dd>
</dl>

<h2 id="文本样式" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">文本样式</h2>

<p>下面的属性控制如何设计文本。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.font")}}</dt>
 <dd>字体设置。 默认值 <code>10px sans-serif。</code></dd>
 <dt>{{domxref("CanvasRenderingContext2D.textAlign")}}</dt>
 <dd>文本对齐设置。 允许的值: <code>start</code> (默认), <code>end</code><code>left</code><code>right</code> 或 <code>center</code>.</dd>
 <dt>{{domxref("CanvasRenderingContext2D.textBaseline")}}</dt>
 <dd>基线对齐设置。 允许的值: <code>top</code><code>hanging</code><code>middle</code><code>alphabetic</code> (默认),<code>ideographic</code><code>bottom</code>.</dd>
 <dt>{{domxref("CanvasRenderingContext2D.direction")}}</dt>
 <dd>文本的方向。 允许的值: <code>ltr, rtl</code><code>inherit</code> (默认).</dd>
</dl>

<h2 id="填充和描边样式" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">填充和描边样式</h2>

<p>填充设计用于图形内部的颜色和样式,描边设计用于图形的边线。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.fillStyle")}}</dt>
 <dd>图形内部的颜色和样式。 默认 <code>#000</code> (黑色).</dd>
 <dt>{{domxref("CanvasRenderingContext2D.strokeStyle")}}</dt>
 <dd>图形边线的颜色和样式。 默认 <code>#000</code> (黑色).</dd>
</dl>

<h2 id="渐变和图案" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">渐变和图案</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.createLinearGradient()")}}</dt>
 <dd>创建一个沿着参数坐标指定的线的线性渐变。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.createRadialGradient()")}}</dt>
 <dd>创建一个沿着参数坐标指定的线的放射性性渐变。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.createPattern()")}}</dt>
 <dd>使用指定的图片 (a {{domxref("CanvasImageSource")}})创建图案。通过 repetition 变量指定的方向上重复源图片。此方法返回 {{domxref("CanvasPattern")}}对象。</dd>
</dl>

<h2 id="阴影" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">阴影</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.shadowBlur")}}</dt>
 <dd>描述模糊效果。 默认 <code>0</code></dd>
 <dt>{{domxref("CanvasRenderingContext2D.shadowColor")}}</dt>
 <dd>阴影的颜色。 默认fully-transparent black.</dd>
 <dt>{{domxref("CanvasRenderingContext2D.shadowOffsetX")}}</dt>
 <dd>阴影水平方向的偏移量。 默认 0.</dd>
 <dt>{{domxref("CanvasRenderingContext2D.shadowOffsetY")}}</dt>
 <dd>阴影垂直方向的偏移量。 默认 0.</dd>
</dl>

<h2 id="路径" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">路径</h2>

<p>下面的方法用来操作对象的路径。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.beginPath()")}}</dt>
 <dd>清空子路径列表开始一个新的路径。当你想创建一个新的路径时,调用此方法。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.closePath()")}}</dt>
 <dd>使笔点返回到当前子路径的起始点。它尝试从当前点到起始点绘制一条直线。如果图形已经是封闭的或者只有一个点,那么此方法不会做任何操作。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.moveTo()")}}</dt>
 <dd>将一个新的子路径的起始点移动到(x,y)坐标。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.lineTo()")}}</dt>
 <dd>使用直线连接子路径的最后的点到x,y坐标。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.bezierCurveTo()")}}</dt>
 <dd>添加一个3次贝赛尔曲线路径。该方法需要三个点。 第一、第二个点是控制点,第三个点是结束点。起始点是当前路径的最后一个点,绘制贝赛尔曲线前,可以通过调用 <code style="font-style: normal;">moveTo()</code> 进行修改。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.quadraticCurveTo()")}}</dt>
 <dd>添加一个2次贝赛尔曲线路径。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.arc()")}}</dt>
 <dd>绘制一段圆弧路径, 圆弧路径的圆心在 <em>(x, y)</em> 位置,半径为<em> r</em> ,根据<em>anticlockwise</em> (默认为顺时针)指定的方向从 <em>startAngle</em> 开始绘制,到 <em>endAngle</em> 结束。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.arcTo()")}}</dt>
 <dd>根据控制点和半径绘制圆弧路径,使用当前的描点(前一个moveTo或lineTo等函数的止点)。根据当前描点与给定的控制点1连接的直线,和控制点1与控制点2连接的直线,作为使用指定半径的圆的<strong>切线</strong>,画出两条切线之间的弧线路径。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.ellipse()")}} {{experimental_inline}}</dt>
 <dd>添加一个椭圆路径,椭圆的圆心在(x,y)位置,半径分别是<em>radiusX</em> 和 <em>radiusY</em> ,按照<em>anticlockwise</em> (默认顺时针)指定的方向,从 <em>startAngle </em> 开始绘制,到 <em>endAngle</em> 结束。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.rect()")}}</dt>
 <dd>创建一个矩形路径,矩形的起点位置是 <em>(x, y) </em>,尺寸为 <em>width</em> 和 <em>height</em></dd>
</dl>

<h2 id="绘制路径" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">绘制路径</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.fill()")}}</dt>
 <dd>使用当前的样式填充子路径。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.stroke()")}}</dt>
 <dd>使用当前的样式描边子路径。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.drawFocusIfNeeded()")}}</dt>
 <dd>如果给定的元素获取了焦点,那么此方法会在当前的路径绘制一个焦点。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.scrollPathIntoView()")}}</dt>
 <dd>将当前或给定的路径滚动到窗口。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.clip()")}}</dt>
 <dd>从当前路径创建一个剪切路径。在  <strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">clip() </strong>调用之后,绘制的所有信息只会出现在剪切路径内部。例如: 参见 Canvas教程中的 <a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Compositing" title="Clipping paths">剪切路径</a> 。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.isPointInPath()")}}</dt>
 <dd>判断当前路径是否包含检测点。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.isPointInStroke()")}}</dt>
 <dd>判断检测点是否在路径的描边线上。</dd>
</dl>

<h2 id="变换" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">变换</h2>

<p><strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">CanvasRenderingContext2D </strong>渲染背景中的对象会有一个当前的变换矩阵,一些方法可以对其进行控制。当创建当前的默认路径,绘制文本、图形和{{domxref("Path2D")}}对象的时候,会应用此变换矩阵。下面列出的方法保持历史和兼容性的原因,是为了{{domxref("SVGMatrix")}}对象现在能够应用于大部分 API ,将来会被替换。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.currentTransform")}}</dt>
 <dd>当前的变换矩阵 ({{domxref("SVGMatrix")}} 对象)。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.rotate()")}}</dt>
 <dd>在变换矩阵中增加旋转,角度变量表示一个顺时针旋转角度并且用弧度表示。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.scale()")}}</dt>
 <dd>根据 x 水平方向和 y 垂直方向,为canvas 单位添加缩放变换。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.translate()")}}</dt>
 <dd>通过在网格中移动 canvas 和 canvas 原点 x 水平方向、原点 y 垂直方向,添加平移变换</dd>
 <dt>{{domxref("CanvasRenderingContext2D.transform()")}}</dt>
 <dd>使用方法参数描述的矩阵多次叠加当前的变换矩阵。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.setTransform()")}}</dt>
 <dd>重新设置当前的变换为单位矩阵,并使用同样的变量调用 <strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">transform() </strong>方法。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.resetTransform()")}} {{experimental_inline}}</dt>
 <dd>使用单位矩阵重新设置当前的变换。</dd>
</dl>

<h2 id="合成" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">合成</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.globalAlpha")}}</dt>
 <dd>在合成到 canvas 之前,设置图形和图像透明度的值。默认 <code style="font-style: normal;">1.0</code> (不透明)。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.globalCompositeOperation")}}</dt>
 <dd>通过 <code>globalAlpha</code> 应用,设置如何在已经存在的位图上绘制图形和图像。</dd>
</dl>

<h2 id="绘制图像" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">绘制图像</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.drawImage()")}}</dt>
 <dd>绘制指定的图片。该方法有多种格式,提供了很大的使用灵活性。</dd>
</dl>

<h2 id="像素控制" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">像素控制</h2>

<p>参见 {{domxref("ImageData")}} 对象。</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.createImageData()")}}</dt>
 <dd>使用指定的尺寸,创建一个新的、空白的 {{domxref("ImageData")}} 对象。所有的像素在新对象中都是透明的。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.getImageData()")}}</dt>
 <dd>返回一个 {{domxref("ImageData")}} 对象,用来描述canvas区域隐含的像素数据,这个区域通过矩形表示,起始点为<em>(sx, sy)、</em>宽为<em>sw、</em>高为<em>sh</em></dd>
 <dt>{{domxref("CanvasRenderingContext2D.putImageData()")}}</dt>
 <dd>将数据从已有的 {{domxref("ImageData")}} 绘制到位图上。 如果提供了脏矩形,只能绘制矩形的像素。 </dd>
</dl>

<h2 id="图像平滑" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">图像平滑</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.imageSmoothingEnabled")}} {{experimental_inline}}</dt>
 <dd>图像平滑的方式;如果禁用,缩放时,图像不会被平滑处理。</dd>
</dl>

<h2 id="canvas_状态" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">canvas 状态</h2>

<p><strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">C</strong><strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">anvasRenderingContext2D</strong>渲染环境包含了多种绘图的样式状态(属性有线的样式、填充样式、阴影样式、文本样式)。下面的方法会帮助你使用这些状态:</p>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.save()")}}</dt>
 <dd>使用栈保存当前的绘画样式状态,你可以使用 <strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">restore()</strong> 恢复任何改变。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.restore()")}}</dt>
 <dd>恢复到最近的绘制样式状态,此状态是通过 <strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">save()</strong> 保存到”状态栈“中最新的元素。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.canvas")}}</dt>
 <dd>{{domxref("HTMLCanvasElement")}} 只读的反向引用。如果和 {{HTMLElement("canvas")}} 元素没有联系,可能为{{jsxref("null")}}</dd>
</dl>

<h2 id="点击区域" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">点击区域</h2>

<dl>
 <dt>{{domxref("CanvasRenderingContext2D.addHitRegion()")}} {{experimental_inline}}</dt>
 <dd>给 canvas 添加点击区域。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.removeHitRegion()")}} {{experimental_inline}}</dt>
 <dd>从 canvas 中删除指定 <code style="font-style: normal;">id</code>  的点击区域。</dd>
 <dt>{{domxref("CanvasRenderingContext2D.clearHitRegions()")}} {{experimental_inline}}</dt>
 <dd>从 canvas 中删除所有的点击区域。</dd>
</dl>

<h2 id="不标准的_APIs" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">不标准的 APIs</h2>

<h3 id="临时的和_WebKit_内核" style="font-size: 1.71428571428571rem;">临时的和 WebKit 内核</h3>

<p>很多 APIs  <a href="https://code.google.com/p/chromium/issues/detail?id=363198">不赞成使用并且将来会被删除</a></p>

<dl>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.clearShadow()</code></dt>
 <dd>删除所有的阴影设置,例如 {{domxref("CanvasRenderingContext2D.shadowColor")}}{{domxref("CanvasRenderingContext2D.shadowBlur")}}</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.drawImageFromRect()</code></dt>
 <dd>这是一个和 <code>drawImage </code>相等的多余的方法。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setAlpha()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.globalAlpha")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setCompositeOperation()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.globalCompositeOperation")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setLineWidth()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.lineWidth")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setLineJoin()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.lineJoin")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setLineCap()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.lineCap")}}替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setMiterLimit()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.miterLimit")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setStrokeColor()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.strokeStyle")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setFillColor()</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.fillStyle")}}替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.setShadow()</code></dt>
 <dd>私用{{domxref("CanvasRenderingContext2D.shadowColor")}}{{domxref("CanvasRenderingContext2D.shadowBlur")}} 替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.webkitLineDash</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.getLineDash()")}}{{domxref("CanvasRenderingContext2D.setLineDash()")}}替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.webkitLineDashOffset</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.lineDashOffset")}}替代。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.webkitImageSmoothingEnabled</code></dt>
 <dd>使用{{domxref("CanvasRenderingContext2D.imageSmoothingEnabled")}} 替代。</dd>
</dl>

<h3 id="仅是临时的" style="font-size: 1.71428571428571rem;">仅是临时的</h3>

<dl>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.getContextAttributes()</code></dt>
 <dd><code style="font-style: normal;">WebGLRenderingContext</code> 方法的启发,该方法会返回一个 <code style="font-style: normal;">Canvas2DContextAttributes</code> 对象。在 canvas 中,这个对象包含属性”storage“,表示存储器的应用(默认”persistent“);属性”alpha“,表示透明度的应用(默认 true)。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.isContextLost()</code></dt>
 <dd>受 <code style="font-style: normal;">WebGLRenderingContext</code> 方法的启发,如果 Canvas 上下文丢失了,会返回 <code style="font-style: normal;">true</code> ,否则返回 <code style="font-style: normal;">false</code> 。</dd>
</dl>

<h3 id="WebKit_特有的" style="font-size: 1.71428571428571rem;">WebKit 特有的</h3>

<dl>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.webkitBackingStorePixelRatio</code></dt>
 <dd>关于 canvas 元素可支持存储的大小。参见 <a href="http://www.html5rocks.com/en/tutorials/canvas/hidpi/">High DPI Canvas</a></dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.webkitGetImageDataHD</code></dt>
 <dd>原本打算支持存储 HD ,但是从 canvas 规范中删除了。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.webkitPutImageDataHD</code></dt>
 <dd>原本打算支持存储 HD ,但是从 canvas 规范中删除了。</dd>
</dl>

<dl>
</dl>

<h3 id="Gecko_特有的" style="font-size: 1.71428571428571rem;">Gecko 特有的</h3>

<dl>
 <dt>{{non-standard_inline}} {{domxref("CanvasRenderingContext2D.filter")}}</dt>
 <dd><span id="summary_alias_container">CSS 和 SVG 滤镜 作为 Canvas APIs。</span> 可能在新版本的规范中会标准化。</dd>
</dl>

<h4 id="有前缀的_APIs" style="font-size: 1.28571428571429rem;">有前缀的 APIs</h4>

<dl>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.mozCurrentTransform</code></dt>
 <dd>设置或获取当前的变换矩阵, 参见{{domxref("CanvasRenderingContext2D.currentTransform")}}{{ gecko_minversion_inline("7.0") }}</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.mozCurrentTransformInverse</code></dt>
 <dd>设置或获取当前翻转的变换矩阵。  {{ gecko_minversion_inline("7.0") }}</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.mozFillRule</code></dt>
 <dd>应用的 <a class="external external-icon" href="http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t" title="http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t">填充规则</a> 。 必须是 <code>evenodd</code> 或者 <code>nonzero</code> (默认)。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.mozImageSmoothingEnabled</code></dt>
 <dd>参见 {{domxref("CanvasRenderingContext2D.imageSmoothingEnabled")}}.</dd>
 <dt>{{non-standard_inline}} {{deprecated_inline}} <code>CanvasRenderingContext2D.mozDash</code></dt>
 <dd>描述相互交替的线段和间距长度的数组 {{ gecko_minversion_inline("7.0") }}。 使用 {{domxref("CanvasRenderingContext2D.getLineDash()")}}{{domxref("CanvasRenderingContext2D.setLineDash()")}} 替代。</dd>
 <dt>{{non-standard_inline}} {{deprecated_inline}} <code>CanvasRenderingContext2D.mozDashOffset</code></dt>
 <dd>描述线段数组在线上从哪里开始。 {{ gecko_minversion_inline("7.0") }}。 使用 {{domxref("CanvasRenderingContext2D.lineDashOffset")}} 替代。</dd>
 <dt>{{non-standard_inline}} {{deprecated_inline}} <code>CanvasRenderingContext2D.mozTextStyle</code></dt>
 <dd>在 Gecko 1.9 中引入, 不赞成使用的 {{domxref("CanvasRenderingContext2D.font")}} 属性。</dd>
 <dt>{{non-standard_inline}} {{obsolete_inline}} <code>CanvasRenderingContext2D.mozDrawText()</code></dt>
 <dd>这个方法在 Gecko 1.9 中引入,从 Gecko 7.0. 开始删除。 使用 {{domxref("CanvasRenderingContext2D.strokeText()")}} 或者 {{domxref("CanvasRenderingContext2D.fillText()")}} 替代。</dd>
 <dt>{{non-standard_inline}} {{obsolete_inline}} <code>CanvasRenderingContext2D.mozMeasureText()</code></dt>
 <dd>这个方法在 Gecko 1.9 中引入, 从 Gecko 7.0. 开始未实现。 使用 {{domxref("CanvasRenderingContext2D.measureText()")}} 替代。</dd>
 <dt>{{non-standard_inline}} {{obsolete_inline}} <code>CanvasRenderingContext2D.mozPathText()</code></dt>
 <dd>这个方法在 Gecko 1.9 中引入,从 Gecko 7.0. 开始删除。</dd>
 <dt>{{non-standard_inline}} {{obsolete_inline}}<code>CanvasRenderingContext2D.mozTextAlongPath()</code></dt>
 <dd>这个方法在 Gecko 1.9 中引入,从 Gecko 7.0. 开始删除。</dd>
</dl>

<h4 id="内部的_APIs_chrome-context_特有的" style="font-size: 1.28571428571429rem;">内部的 APIs (chrome-context 特有的)</h4>

<dl>
 <dt>{{non-standard_inline}} {{domxref("CanvasRenderingContext2D.asyncDrawXULElement()")}}</dt>
 <dd><strong style="font-family: courier new,andale mono,monospace; font-weight: bold;">canvas</strong> 内渲染一个 XUL 元素的区域。</dd>
 <dt>{{non-standard_inline}} {{domxref("CanvasRenderingContext2D.drawWindow()")}}</dt>
 <dd>在 <strong style="font-family: courier new,andale mono,monospace;">canvas</strong> 内渲染一个窗口的区域。窗口可视区的内容被渲染,忽略窗口的剪切和滚动。</dd>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.demote()</code></dt>
 <dd>这个方法会引起当前的上下文使用后端的硬件加速作为软件的备选方案。所有的状态都会被保留。</dd>
</dl>

<h3 id="IE_浏览器" style="font-size: 1.71428571428571rem;">IE 浏览器</h3>

<dl>
 <dt>{{non-standard_inline}} <code>CanvasRenderingContext2D.msFillRule</code></dt>
 <dd>应用的<a class="external external-icon" href="http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t" title="http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t">填充规则</a> 。必须是 <code>evenodd</code> 或者 <code>nonzero</code> (默认)。</dd>
</dl>

<h2 id="规范" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">规范</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('HTML WHATWG', "#2dcontext", "CanvasRenderingContext2D")}}</td>
   <td>{{Spec2('HTML WHATWG')}}</td>
   <td></td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">浏览器兼容性</h2>

<p>{{Compat("api.CanvasRenderingContext2D")}}</p>

<h2 id="参见" style="margin-bottom: 20px; font-size: 2.14285714285714rem;">参见</h2>

<ul>
 <li>{{domxref("HTMLCanvasElement")}}</li>
 <li>{{HTMLElement("canvas")}}</li>
</ul>