translate3d()& rotateY()工作,但透视起源不起作用......为什么?

时间:2015-06-26 18:31:58

标签: jquery css3 perspective rotatetransform translate3d

我使用jQuery通过使用切换类垂直移动元素,同时沿Y轴旋转。我知道jQuery正在应用这些类,因为translate3d()正在垂直移动元素,而rotateY()正在旋转元素。但是,我有两个问题:

  1. perspective-origin 对视角没有影响。相反,该元素在状态之间闪烁着奇怪的感觉。
  2. 除非在最终状态中定义并从初始状态中排除,否则
  3. perspective()无效... ??
  4. 以下是我使用的CSS:

    初始状态:

    transform:translate3d(0px,-210px,0px) rotateY(-90deg);
    perspective-origin: center center;
    

    最终状态:

    transform: translate3d(0px,-110px,0px) rotateY(0deg) perspective(100px);
    perspective-origin: center center;
    

    希望有足够的信息来发现问题。我基本上无法控制动画的视角。

    我最初更改了margin-top值,但是想要开始使用3d变换来获得更好的动画效果。

    我正在使用Chrome桌面,我会不断更新。

    更新:我创建了一个基本上显示问题的JSFiddle。我知道我有很多前缀,主要是因为我不知道哪些前缀是必要的。希望这至少可以解决这个问题:Perspective并没有做任何事情。 JSFiddle:https://jsfiddle.net/56aq22dc/

1 个答案:

答案 0 :(得分:1)

转换函数中的顺序很重要

它们从右到左应用,所以这个

transform:  translate3d(0px,0px,0px) rotateY(45deg) perspective(100px);

在元素未旋转时应用透视,因此它不会显示。

应该是

transform:  perspective(100px) translate3d(0px,-50px,0px) rotateY(45deg);

首先旋转,然后翻译,然后应用透视

fiddle

这适用于视角(或者更好的说,应用的视角是显而易见的)。但由于它将它应用于翻译元素,因此它不会居中。

如果您希望它居中,请在透​​视之前应用之前的视角。请注意,转换是从右到左计算的,因此在列表中之前的意思是

transform: translate3d(0px,-50px,0px) perspective(600px) rotateY(80deg);

请注意,将perspective作为函数而不是属性应用时,perspective-origin是无用的。

fiddle