CanvasRenderingContext2D: метод setTransform()
Базовая Широко поддерживается
Эта функция хорошо устоялась и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод CanvasRenderingContext2D.setTransform() API холста 2D сбрасывает (перезаписывает) текущее преобразование на единичную матрицу, а затем вызывает преобразование, описанное аргументами этого метода. Это позволяет масштабировать, поворачивать, перемещать и наклонять контекст.
Примечание: См. также метод 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управляют горизонтальным и вертикальным наклоном контекста.
Значение возврата
None (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 |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
setTransform |
2 | 12 | 3 | ≤12.1 | 4 | 18 | 4 | ≤12.1 | 3.2 | 1.0 | ≤37 |
matrix_parameter |
68 | 79 | 70 | 55 | 11.1 | 68 | 79 | 48 | 11.3 | 10.0 | 68 |
См. также
- Интерфейс, определяющий этот метод:
CanvasRenderingContext2D CanvasRenderingContext2D.transform()
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setTransform