CanvasRenderingContext2D: createPattern() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

Canvas 2D API 的 CanvasRenderingContext2D.createPattern() 方法使用指定的图像和重复方式创建图案。此方法返回一个 CanvasPattern 对象。

此方法不会直接在画布上绘制任何内容。它创建的图案必须赋给 CanvasRenderingContext2D.fillStyleCanvasRenderingContext2D.strokeStyle 属性,之后才能应用于任何后续绘图。

语法

js
createPattern(image, repetition)

参数

图片

用作图案图像的图像。它可以是以下任何一种:

重复方式

一个字符串,指示如何重复图案的图像。可能的值包括:

  • "repeat"(两个方向重复)
  • "repeat-x"(仅水平方向重复)
  • "repeat-y"(仅垂直方向重复)
  • "no-repeat"(两个方向都不重复)

null 值被视为与空字符串("")相同:两者都是 "repeat" 的同义词。

返回值

CanvasPattern

一个描述图案的不透明对象。

如果 image 未完全加载(HTMLImageElement.completefalse),则返回 null

示例

从图像创建图案

此示例使用 createPattern() 方法创建具有重复源图像的 CanvasPattern。创建后,该图案将被赋给画布上下文的填充样式,并应用于一个矩形。

原始图像如下所示:

A flowery pattern

HTML

html
<canvas id="canvas" width="300" height="300"></canvas>

JavaScript

js
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

const img = new Image();
img.src = "canvas_create_pattern.png";
// Only use the image after it's loaded
img.onload = () => {
  const pattern = ctx.createPattern(img, "repeat");
  ctx.fillStyle = pattern;
  ctx.fillRect(0, 0, 300, 300);
};

从画布创建图案

在此示例中,我们从一个离屏画布的内容创建图案。然后,我们将该图案应用于主画布的填充样式,并用图案填充该画布。

JavaScript

js
// Create a pattern, offscreen
const patternCanvas = document.createElement("canvas");
const patternContext = patternCanvas.getContext("2d");

// Give the pattern a width and height of 50
patternCanvas.width = 50;
patternCanvas.height = 50;

// Give the pattern a background color and draw an arc
patternContext.fillStyle = "#ffeecc";
patternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);
patternContext.arc(0, 0, 50, 0, 0.5 * Math.PI);
patternContext.stroke();

// Create our primary canvas and fill it with the pattern
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
const pattern = ctx.createPattern(patternCanvas, "repeat");
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Add our primary canvas to the webpage
document.body.appendChild(canvas);

结果

规范

规范
HTML
# dom-context-2d-createpattern-dev

浏览器兼容性

另见