【问题标题】:Webkit Transformations, Translate after rotationWebkit 转换,旋转后翻译
【发布时间】:2011-09-01 12:08:47
【问题描述】:

我一直致力于相当简单的 webkit 转换来创建(外行的)动画。我做得很好,除了一个问题,我还没有找到一些信息。如下:

描述:我有一个矩形 div,我使用 target.style.webkitTransform += 'rotateZ(90deg)' 旋转 90 度;这很好 - 我使用 target.style.webkitTransform += 'translate3d(50px, 0px, 0px)' 翻译它;

问题:当您旋转时,元素的轴也会旋转,如果您(例如)在 x 轴上平移,对象将沿新方向(元素面向的方向)移动,例如在上面的示例中向下 50 像素(旋转后)。

我需要一种方法来重新计算/重置轴(不改变旋转),以便动画对于外行来说是有意义的,即对于程序员来说,很容易看到对象面向不同的方向,但对于非技术人员离开的用户将永远保持离开。

要求:当用户说它在 x 轴上移动 50px 时,它应该在 x 轴上移动 50px(对于用户),而不管旋转或任何其他预先应用到它的变换。

进一步:我不会提前知道用户将如何操作对象,因此我不能采用固定值并解决它们,因此需要一个公式来重新计算/重置给定对象的样式属性和构造的所有内容进一步的转换。

【问题讨论】:

  • 你不能用 top 和 left 属性(以及绝对或相对位置)移动元素吗?
  • 这不是一个选项,原因有两个: 1- 我不想弄乱顶部和左侧,因为我也会提供将元素滑回的选项。在这种情况下,我可以存储每个变换的初始位置和最后一个位置,或者我只使用偏移位置。 2- 使用 left 和 top 属性会在设备上产生不稳定的动画,变换更加平滑 - 当您有许多相对较大尺寸的元素时更是如此。

标签: javascript css rotation webkit translate-animation


【解决方案1】:

如果您将translate() 附加到变换的末尾,那么它应该完全按照您指定的方式进行平移,而与之前的任何旋转无关。

【讨论】:

  • 我正在附加它,只是它没有任何区别,无论我使用 translate 还是 translate3d
  • 编辑问题以使其更易于理解。
  • 啊,确实。问题是你想变换一个对象的位置,而 CSS 2d 变换变换坐标系......你的选择是把翻译放在第一位(所以它发生在未变换的页面坐标系中)或手动计算正确的翻译值当前转换的坐标以实现您想要的页面相关效果....(有效地反转当前转换矩阵的线性部分,然后将该逆矩阵乘以您想要的平移以获得您坚持的东西translate())。跨度>
  • 我刚开始接触矩阵,如果有什么地方我会继续发布。同时,任何人处理过这样的问题(和/或通过矩阵解决),请不要发布!完成后,我会将我的页面放在博客或服务器上,以便其他人受益! @Boris,感谢您的回复!
猜你喜欢
  • 2014-03-23
  • 2014-08-27
  • 1970-01-01
  • 2012-01-11
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2022-01-10
相关资源
最近更新 更多