我想做以下事情:给定一个带有透视图的容器和一个带有 translateZ 值的内部元素,我想用 translateY “拉起”它,以便在视觉上触摸周围容器的顶部:http://jsfiddle .net/8R4ym/129/
有没有某种公式,给定容器的透视值、元素的宽度和高度以及它的 Z 平移,我可以得到那种“顶部”计算?我一直在玩它,但我似乎找不到它的一些规则,因为似乎这些都是变量。
谢谢你的帮助。
我想做以下事情:给定一个带有透视图的容器和一个带有 translateZ 值的内部元素,我想用 translateY “拉起”它,以便在视觉上触摸周围容器的顶部:http://jsfiddle .net/8R4ym/129/
有没有某种公式,给定容器的透视值、元素的宽度和高度以及它的 Z 平移,我可以得到那种“顶部”计算?我一直在玩它,但我似乎找不到它的一些规则,因为似乎这些都是变量。
谢谢你的帮助。
是的!
实际上有一个非常简单的公式可以找到偏移量 - 维基百科上的3d Projection 文章有一个图表和公式。
公式在bx = ax * bz / az哪里:
ax是到变换原点的原始距离az是透视+否定translateZbz是视角这会给你:
bx- 到变换原点的新距离所以,你需要知道:
bz:(perspective例如1000px:)ax:与变换原点的偏移量,例如:如果原点是 50%,那么这需要是元素top相对于父元素中心的 ( parent.height/2 + element.top) -- 假设-500pxz:元素的translateZ(例如-600px:)az那么bz + z * -1,在这种情况下:1000 + (-600 * -1) = 1600所以公式是:-500 * 1000 / 1600 = -312.5
该元素-312.5px从原点垂直偏移,而最初它是 offset -500px,这两个数字之间的差异是您需要添加到旧top值以获得等效的新值。
此公式也适用于 Y 轴。
我在这里整理了一个简单的例子:http: //jsfiddle.net/trolleymusic/xYRgx/
可能有(不知道副手),但您是否尝试过-webkit-transform-origin:;先更改以查看是否可以简单地沿顶部应用转换,以便元素出现在您想要的位置而不进行翻译?