aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/canvaspattern/settransform/index.html
blob: 52f5857d99775bad1372499abfb6308c3f8ede68 (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
---
title: CanvasPattern.setTransform()
slug: Web/API/CanvasPattern/setTransform
translation_of: Web/API/CanvasPattern/setTransform
---
<div>{{APIRef("Canvas API")}} {{SeeCompatTable}}</div>

<p><code><strong>CanvasPattern</strong></code><strong><code>.setTransform()</code></strong> 方法使用 {{domxref("SVGMatrix")}} 对象作为图案的变换矩阵,并在此图案上调用它。</p>

<h2 id="语法">语法</h2>

<pre class="syntaxbox">void <var><em>pattern</em>.setTransform(matrix);</var>
</pre>

<h3 id="参数">参数</h3>

<dl>
 <dt><code>matrix</code></dt>
 <dd>{{domxref("SVGMatrix")}} ,被用作图案的变换矩阵。</dd>
</dl>

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

<h3 id="使用_setTransform_方法">使用 <code>setTransform</code> 方法</h3>

<p>这是一段简单的代码片段,使用 <code>setTransform</code> 方法创建一个来自 {{domxref("SVGMatrix")}} 具有指定图案变化的{{domxref("CanvasPattern")}} 。如例子所示,如果你把图案赋值给当前的 {{domxref("CanvasRenderingContext2D.fillStyle", "fillStyle")}} ,当你使用 {{domxref("CanvasRenderingContext2D.fillRect", "fillRect()")}} 方法时,图案会被应用到 canvas 上绘制出效果。</p>

<h4 id="HTML">HTML</h4>

<pre class="brush: html">&lt;canvas id="canvas"&gt;&lt;/canvas&gt;
&lt;svg id="svg1"&gt;&lt;/svg&gt;
</pre>

<h4 id="JavaScript">JavaScript</h4>

<pre class="brush: js; highlight:[12]">var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

var svg1 = document.getElementById("svg1");
var matrix = svg1.createSVGMatrix();

var img = new Image();
img.src = 'https://mdn.mozillademos.org/files/222/Canvas_createpattern.png';

img.onload = function() {
  var pattern = ctx.createPattern(img, 'repeat');
  pattern.setTransform(matrix.rotate(-45).scale(1.5));
  ctx.fillStyle = pattern;
  ctx.fillRect(0,0,400,400);
};
</pre>

<p>修改下面的代码并在线查看 canvas 的变化:</p>

<div class="hidden">
<h6 id="Playable_code">Playable code</h6>

<pre class="brush: html">&lt;canvas id="canvas" width="400" height="200" class="playable-canvas"&gt;&lt;/canvas&gt;
&lt;svg id="svg1" style="display:none"&gt;&lt;/svg&gt;
&lt;div class="playable-buttons"&gt;
  &lt;input id="edit" type="button" value="Edit" /&gt;
  &lt;input id="reset" type="button" value="Reset" /&gt;
&lt;/div&gt;
&lt;textarea id="code" class="playable-code" style="height:120px"&gt;
var img = new Image();
img.src = 'https://mdn.mozillademos.org/files/222/Canvas_createpattern.png';
img.onload = function() {
  var pattern = ctx.createPattern(img, 'repeat');
  pattern.setTransform(matrix.rotate(-45).scale(1.5));
  ctx.fillStyle = pattern;
  ctx.fillRect(0,0,400,400);
};&lt;/textarea&gt;
</pre>

<pre class="brush: js">var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var textarea = document.getElementById("code");
var reset = document.getElementById("reset");
var edit = document.getElementById("edit");
var code = textarea.value;

var svg1 = document.getElementById("svg1");
var matrix = svg1.createSVGMatrix();

function drawCanvas() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  eval(textarea.value);
}

reset.addEventListener("click", function() {
  textarea.value = code;
  drawCanvas();
});

edit.addEventListener("click", function() {
  textarea.focus();
})

textarea.addEventListener("input", drawCanvas);
window.addEventListener("load", drawCanvas);
</pre>
</div>

<p>{{ EmbedLiveSample('Playable_code', 700, 380) }}</p>

<h2 id="规范描述">规范描述</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', "scripting.html#dom-canvaspattern-settransform", "CanvasPattern.setTransform")}}</td>
   <td>{{Spec2('HTML WHATWG')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

{{Compat("api.CanvasPattern.setTransform")}}

<h2 id="参见">参见</h2>

<ul>
 <li>接口定义,{{domxref("CanvasPattern")}}</li>
 <li>{{domxref("SVGMatrix")}}</li>
</ul>