--- title: HTMLCanvasElement.getContext() slug: Web/API/HTMLCanvasElement/getContext tags: - API - Canvas translation_of: Web/API/HTMLCanvasElement/getContext ---
HTMLCanvasElement.getContext()
方法返回{{jsxref("canvas")}} 的上下文,如果上下文没有定义则返回 {{jsxref("null")}} .
在同一个canvas上以相同的 contextType
多次调用此方法只会返回同一个上下文。
var ctx = canvas.getContext(contextType); var ctx = canvas.getContext(contextType, contextAttributes);
"2d
", 建立一个 {{domxref("CanvasRenderingContext2D")}} 二维渲染上下文。"webgl"
(或"experimental-webgl"
) 这将创建一个 {{domxref("WebGLRenderingContext")}} 三维渲染上下文对象。只在实现WebGL 版本1(OpenGL ES 2.0)的浏览器上可用。webgl2
" (或 "experimental-webgl2
") 这将创建一个 {{domxref("WebGL2RenderingContext")}} 三维渲染上下文对象。只在实现 WebGL 版本2 (OpenGL ES 3.0)的浏览器上可用。{{experimental_inline}}"bitmaprenderer"
这将创建一个只提供将canvas内容替换为指定{{domxref("ImageBitmap")}}功能的{{domxref("ImageBitmapRenderingContext")}} 。注意: 标识符 "experimental-webgl
" 或 "experimental-webgl2
" 用于新 WebGL的实现。 这些实现还没有达到测试套件一致性或图形驱动程序平台局势尚不稳定。Khronos Group 集团认证WebGL 实现在某些一致性规则。
上下文属性(contextAttributes)
你可以在创建渲染上下文的时候设置多个属性,例如:
canvas.getContext("webgl", { antialias: false, depth: false });2d 上下文属性:
alpha
: {{jsxref("boolean")}}值表明{{jsxref("canvas")}}包含一个{{jsxref("alpha")}}通道. 如果设置为{{jsxref("false")}}, 浏览器将认为{{jsxref("canvas")}}背景总是不透明的, 这样可以加速绘制透明的内容和图片.willReadFrequently
: {{jsxref("boolean")}}值表明是否有重复读取计划。经常使用{{domxref("CanvasRenderingContext2D.getImageData", "getImageData()")}},这将迫使软件使用2D {{jsxref("canvas")}} 并 节省内存(而不是硬件加速)。这个方案适用于存在属性 gfx.canvas.willReadFrequently
的环境。并设置为{{jsxref("true")}} (缺省情况下,只有B2G / Firefox OS).storage
: {{jsxref("string")}} 这样表示使用哪种方式存储(默认为:持久("persistent")).alpha
: {{jsxref("boolean")}}值表明{{jsxref("canvas")}}包含一个{{jsxref("alpha")}}缓冲区。
antialias
: {{jsxref("boolean")}}值表明是否开启抗锯齿。
depth
: {{jsxref("boolean")}}值表明绘制缓冲区包含一个深度至少为16位的缓冲区。
failIfMajorPerformanceCaveat
: 表明在一个系统性能低的环境是否创建该上下文的{{jsxref("boolean")}}值。
powerPreference
: 指示浏览器在运行WebGL上下文时使用相应的GPU电源配置。 可能值如下:
"default"
:自动选择,默认值。
"high-performance"
: 高性能模式。
"low-power"
: 节能模式。
premultipliedAlpha
: 表明排版引擎讲假设绘制缓冲区包含预混合alpha通道的{{jsxref("boolean")}}值。
preserveDrawingBuffer
: 如果这个值为{{jsxref("true")}}缓冲区将不会被清除,会保存下来,直到被清除或被使用者覆盖。
stencil
: 表明绘制缓冲区包含一个深度至少为8位的模版缓冲区{{jsxref("boolean")}}值。
{{domxref("RenderingContext")}} 返回值是下列之一:
"2d"
,"webgl"
和"experimental-webgl"
,"webgl2"
和"experimental-webgl2"
, 或者"bitmaprenderer"
.如果 contextType
不是上述之一,返回{{jsxref("null")}}.
定义 {{HTMLElement("canvas")}} 元素:
<canvas id="canvas" width="300" height="300"></canvas>
通过如下代码可以获取 {{jsxref("canvas")}}2d
上下文:
var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); console.log(ctx); // CanvasRenderingContext2D { ... }
现在你已经获取到了2D 画布的渲染上下文({{domxref("CanvasRenderingContext2D")}}),可以使用它画你想画的了.
Specification | Status | Comment |
---|---|---|
{{SpecName('HTML WHATWG', "scripting.html#dom-canvas-getcontext", "HTMLCanvasElement.getContext")}} | {{Spec2('HTML WHATWG')}} | No change since the latest snapshot, {{SpecName('HTML5 W3C')}} |
{{SpecName('HTML5.1', "scripting-1.html#dom-canvas-getcontext", "HTMLCanvasElement.getContext")}} | {{Spec2('HTML5.1')}} | |
{{SpecName('HTML5 W3C', "scripting-1.html#dom-canvas-getcontext", "HTMLCanvasElement.getContext")}} | {{Spec2('HTML5 W3C')}} | Snapshot of the {{SpecName('HTML WHATWG')}} containing the initial definition. |
{{Compat("api.HTMLCanvasElement.getContext")}}