跳到主要内容

变换

变换是一些样式属性,可帮助你使用 2D 或 3D 变换修改组件的外观和位置。但是,应用变换后,变换组件周围的布局保持不变,因此它可能会与附近的组件重叠。你可以为变换组件、附近的组件应用 margin,或为容器应用 padding,以防止此类重叠。

示例​


参考

Transform​

transform 接受一个变换对象数组或以空格分隔的字符串值。每个对象将要变换的属性指定为键,并将变换中要使用的值指定为值。对象不应合并。每个对象使用一个键值对。

rotate 变换要求使用字符串,以便变换可以用度(deg)或弧度(rad)表示。例如:

JavaScript
{
transform: [{rotateX: '45deg'}, {rotateZ: '0.785398rad'}],
}

也可以使用以空格分隔的字符串实现相同的效果:

JavaScript
{
transform: 'rotateX(45deg) rotateZ(0.785398rad)',
}

skew 变换要求使用字符串,以便变换可以用度(deg)表示。例如:

JavaScript
{
transform: [{skewX: '45deg'}],
}

平移变换(translateX 和 translateY)接受数字(单位为 point)或百分比字符串(例如 '50%'、'100%')。使用百分比时,偏移量相对于元素的宽度(translateX)或高度(translateY)。百分比平移在新架构中受支持。例如:

JavaScript
{
transform: [{translateX: '50%'}, {translateY: 100}],
}

Matrix Transform​

matrix 变换接受一个由 16 个数字组成的 4x4 变换矩阵数组。这使你可以在单个操作中应用结合平移、旋转、缩放和倾斜的复杂变换。

矩阵以列主序指定:

JavaScript
{
transform: [
{
matrix: [
scaleX,
skewY,
0,
0,
skewX,
scaleY,
0,
0,
0,
0,
1,
0,
translateX,
translateY,
0,
1,
],
},
];
}

例如,要应用缩放和倾斜的组合:

JavaScript
{
transform: [
{
matrix: [
1, 0.5, 0, 0, 0.5, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
],
},
];
}
备注

当你需要应用预先计算的变换矩阵时,Matrix 变换非常有用,例如使用动画库中的矩阵,或构建 UI 编辑器应用程序时。对于基本变换,建议使用单独的变换属性(scale、rotate、translate 等),因为它们更具可读性。

类型是否必需
对象数组: {matrix: number[]}, {perspective: number}, {rotate: string}, {rotateX: string}, {rotateY: string}, {rotateZ: string}, {scale: number}, {scaleX: number}, {scaleY: number}, {translateX: number | string}, {translateY: number | string}, {skewX: string}, {skewY: string},或字符串否

🗑️ decomposedMatrix、rotation、scaleX、scaleY、transformMatrix、translateX、translateY​

Deprecated

请改用 transform prop

Transform Origin​

transformOrigin 属性设置视图变换的原点。变换原点是应用变换时围绕的点。默认情况下,变换的原点是 center。

示例

值​

Transform origin 支持 px、percentage 以及关键字 top、left、right、bottom、center 值。

transformOrigin 属性可以使用一个、两个或三个值指定,其中每个值表示一个偏移量。

单值语法:​

  • 该值必须是 px、percentage,或关键字 left、center、right、top 和 bottom 之一
JavaScript
{
transformOrigin: '20px',
transformOrigin: 'bottom',
}

双值语法:​

  • 第一个值(x 偏移量)必须是 px、percentage,或关键字 left、center 和 right 之一
  • 第二个值(y 偏移量)必须是 px、percentage,或关键字 top、center 和 bottom 之一
JavaScript
{
transformOrigin: '10px 2px',
transformOrigin: 'left top',
transformOrigin: 'top right',
}

三值语法:​

  • 前两个值与双值语法相同
  • 第三个值(z 偏移量)必须是 px。它始终表示 Z 偏移量
JavaScript
{
transformOrigin: '2px 30% 10px',
transformOrigin: 'right bottom 20px',
}

数组语法​

transformOrigin 也支持数组语法。使用 Animated API 时,这种语法更加方便。同时它还避免了字符串解析,因此效率应该更高。

JavaScript
{
// Using numeric values
transformOrigin: [10, 30, 40],
// Mixing numeric and percentage values
transformOrigin: [10, '20%', 0],
}

你可以参考 MDN 的 Transform origin 指南以获取更多信息。