CanvasRenderingContext2D:setTransform() 方法
CanvasRenderingContext2D.setTransform() 方法是 Canvas 2D API 的一部分,它會重置(覆蓋)當前變換為單位矩陣,然後應用該方法引數描述的變換。這允許你對畫布進行縮放、旋轉、平移(移動)和傾斜。
注意:另請參閱 transform() 方法;它不會覆蓋當前的變換矩陣,而是將其與給定的矩陣相乘。
語法
setTransform(a, b, c, d, e, f)
setTransform(matrix)
變換矩陣描述如下:.
這個變換矩陣會乘以代表畫布上每個繪製點的列向量的左邊,以生成畫布上使用的最終座標。
引數
setTransform() 接受兩種型別的引數。舊的型別包含幾個引數,用於表示要設定的變換矩陣的各個分量。
a(m11)-
矩陣第一行第一列的單元格。
b(m12)-
矩陣第二行第一列的單元格。
c(m21)-
矩陣第一行第二列的單元格。
d(m22)-
矩陣第二行第二列的單元格。
e(m41)-
矩陣第一行第三列的單元格。
f(m42)-
矩陣第二行第三列的單元格。
或者,你可以傳遞一個單一引數,該引數是一個物件,其中包含上述值作為屬性。引數名稱即屬性鍵,如果存在兩個同義名稱(例如 m11 和 a),它們必須是相同的數值,否則將丟擲 TypeError。使用物件形式可以省略某些引數 — a 和 d 預設為 1,而其餘引數預設為 0。
如果一個點的原始座標是,那麼變換後它的座標將是。這意味著
e和f控制著畫布的水平和垂直平移。- 當
b和c為0時,a和d控制著畫布的水平和垂直縮放。 - 當
a和d為1時,b和c控制著畫布的水平和垂直傾斜。
返回值
無(undefined)。
示例
傾斜形狀
此示例將矩形垂直(.2)和水平(.8)傾斜。縮放和平移保持不變。
HTML
<canvas id="canvas"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
ctx.setTransform(1, 0.2, 0.8, 1, 0, 0);
ctx.fillRect(0, 0, 100, 100);
結果
檢索和傳遞 DOMMatrix 物件
在下面的示例中,我們有兩個 <canvas> 元素。我們使用第一種型別的 setTransform() 方法為第一個元素的上下文應用變換,並在其上繪製一個正方形,然後使用 CanvasRenderingContext2D.getTransform() 方法從中檢索矩陣。
然後,我們將檢索到的矩陣直接應用於第二個畫布上下文,方法是將 DOMMatrix 物件直接傳遞給 setTransform()(即第二種型別),並在其上繪製一個圓形。
HTML
<!-- First canvas (ctx1) -->
<canvas width="240"></canvas>
<!-- Second canvas (ctx2) -->
<canvas width="240"></canvas>
CSS
canvas {
border: 1px solid black;
}
JavaScript
const canvases = document.querySelectorAll("canvas");
const ctx1 = canvases[0].getContext("2d");
const ctx2 = canvases[1].getContext("2d");
ctx1.setTransform(1, 0.2, 0.8, 1, 0, 0);
ctx1.fillRect(25, 25, 50, 50);
let storedTransform = ctx1.getTransform();
console.log(storedTransform);
ctx2.setTransform(storedTransform);
ctx2.beginPath();
ctx2.arc(50, 50, 50, 0, 2 * Math.PI);
ctx2.fill();
結果
規範
| 規範 |
|---|
| HTML # dom-context-2d-settransform-dev |
瀏覽器相容性
載入中…