Transforms
Transforms 是一种样式属性,可帮助您使用 2D 或 3D 变换来修改组件的外观和位置。但是,一旦应用了变换,变换组件周围的布局将保持不变,因此它可能会与其他组件重叠。您可以为变换组件、相邻组件应用 margin,或为容器应用 padding,以防止此类重叠。
示例
参考
Transform
transform 接受一个变换对象数组或空格分隔的字符串值。每个对象指定将被变换的属性作为键,以及变换中要使用的值。不应组合对象。每个对象使用单一键/值对。
rotate 变换需要一个字符串,以便变换可以表示为度 (deg) 或弧度 (rad)。例如:
{
transform: [{rotateX: '45deg'}, {rotateZ: '0.785398rad'}],
}
使用空格分隔的字符串也可以达到相同的效果:
{
transform: 'rotateX(45deg) rotateZ(0.785398rad)',
}
skew 变换需要一个字符串,以便变换可以表示为度 (deg)。例如:
{
transform: [{skewX: '45deg'}],
}
Matrix Transform
matrix 变换接受一个 4x4 变换矩阵,表示为 16 个数字的数组。这允许您应用复杂的变换,将平移、旋转、缩放和倾斜组合在一个操作中。
矩阵按列主序指定
{
transform: [
{
matrix: [
scaleX,
skewY,
0,
0,
skewX,
scaleY,
0,
0,
0,
0,
1,
0,
translateX,
translateY,
0,
1,
],
},
];
}
例如,应用缩放和倾斜的组合:
{
transform: [
{
matrix: [
1, 0.5, 0, 0, 0.5, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
],
},
];
}
当您需要应用预计算的变换矩阵时(例如来自动画库的矩阵,或者在构建 UI 编辑器应用程序时),矩阵变换非常有用。对于基本变换,建议使用单独的变换属性(scale、rotate、translate 等),因为它们更易读。
| 类型 | 必需 |
|---|---|
对象数组:{matrix: number[]}, {perspective: number}, {rotate: string}, {rotateX: string}, {rotateY: string}, {rotateZ: string}, {scale: number}, {scaleX: number}, {scaleY: number}, {translateX: number}, {translateY: number}, {skewX: string}, {skewY: string} 或字符串 | 否 |
decomposedMatrix, rotation, scaleX, scaleY, transformMatrix, translateX, translateY
请使用 transform prop 代替。
Transform Origin
transformOrigin 属性设置视图变换的原点。变换原点是应用变换的点。默认情况下,变换的原点是 center。
示例
值
Transform origin 支持 px、percentage 和关键字 top、left、right、bottom、center 值。
transformOrigin 属性可以使用一个、两个或三个值指定,每个值代表一个偏移量。
单值语法:
- 值必须是
px、percentage,或者关键字left、center、right、top和bottom之一。
{
transformOrigin: '20px',
transformOrigin: 'bottom',
}
双值语法:
- 第一个值(x 偏移量)必须是
px、percentage,或者关键字left、center和right之一。 - 第二个值(y 偏移量)必须是
px、percentage,或者关键字top、center和bottom之一。
{
transformOrigin: '10px 2px',
transformOrigin: 'left top',
transformOrigin: 'top right',
}
三值语法:
- 前两个值与双值语法相同。
- 第三个值(z 偏移量)必须是
px。它始终表示 Z 偏移量。
{
transformOrigin: '2px 30% 10px',
transformOrigin: 'right bottom 20px',
}
数组语法
transformOrigin 还支持数组语法。这使其可以方便地与 Animated API 一起使用。它还可以避免字符串解析,因此效率更高。
{
// Using numeric values
transformOrigin: [10, 30, 40],
// Mixing numeric and percentage values
transformOrigin: [10, '20%', 0],
}
有关更多信息,您可以参考 MDN 关于 Transform origin 的指南。