DOMMatrixReadOnly.scale() - Web APIs 编辑

BCD tables only load in the browser

Experimental

This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The scale() method of the DOMMatrixReadOnly interface creates a new matrix being the result of the original matrix with a scale transform applied.

The scale() method is specified with either one or six values.

DOMMatrix.scale(scaleX[, scaleY][, scaleZ][, originX][, originY][, originZ])
scaleX
A multiplier for the scale value on the x-axis.
scaleY Optional
A multiplier for the scale value on the y-axis.  If not supplied, this defaults to the value of scaleX.
scaleZ Optional
A multiplier for the scale value on the z-axis.  If this value is anything other than 1, the resulting matrix will be 3D.
originX Optional
An x-coordinate for the origin of the transformation.  If no origin is supplied, this defaults to 0.
originY Optional
A y-coordinate for the origin of the transformation.  If no origin is supplied, this defaults to 0.
originZ Optional
A z-coordinate for the origin of the transformation.  If no origin is supplied, this defaults to 0. If this value is anything other than 0, the resulting matrix will be 3D.

Returns a DOMMatrix containing a new matrix being the result of the matrix x and y dimensions being scaled by the given factor, centered on the origin given. The original matrix is not modified.

If a scale is applied about the z-axis, the resulting matrix will be a 4x4 3D matrix.

Note: At time of writing, Firefox still supports an older version of the specification that accepts either one or three values.

DOMMatrix.scale(scale[, originX][, originY])

We'll show an example of how you can deal with the cross-browser support implications of this in the Examples section, below.

This SVG contains three squares, one red, one blue, and one green, each positioned at the document origin:

<svg width="250" height="250" viewBox="0 0 25 25">
  <rect width="25" height="25" fill="red" />
  <rect id="transformed" width="25" height="25" fill="blue" />
  <rect id="transformedOrigin" width="25" height="25" fill="green" />
</svg>

This JavaScript first creates an identity matrix, then uses the scale() method to create a new matrix with a single parameter. 

We test if the browser supports a six parameter scale() method by creating a new matrix using three parameters and observing it's is2D property — if this is false then the third parameter has been accepted by the browser as a scaleZ parameter, making this a 3D matrix.

We then create a new matrix scaled about a given origin, using either three or six parameters depending on the browser support.

These new matrices are then applied to the blue and green squares as a transform, changing their dimensions and position. The red square is left in place.

const matrix = new DOMMatrixReadOnly();
const scaledMatrix = matrix.scale(0.5);

let scaledMatrixWithOrigin = matrix.scale(0.5, 25, 25);

// if the browser has interpreted these parameters as scaleX, scaleY, scaleZ, the resulting matrix is 3D
const browserExpectsSixParamScale = !scaledMatrixWithOrigin.is2D;
if (browserExpectsSixParamScale) {
  scaledMatrixWithOrigin = matrix.scale(0.5, 0.5, 1, 25, 25, 0);
}

document.querySelector('#transformed').setAttribute('transform', scaledMatrix.toString());
document.querySelector('#transformedOrigin').setAttribute('transform', scaledMatrixWithOrigin.toString());
ScreenshotLive sample
SpecificationStatusComment
Geometry Interfaces Module Level 1
The definition of 'DOMMatrixReadOnly.scale()' in that specification.
Candidate RecommendationInitial definition

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:116 次

字数:5831

最后编辑:8年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文