css transform + css transition =跳过的帧[谷歌浏览器]

时间:2015-08-22 22:54:42

标签: css google-chrome css-transitions css-transforms

当我点击场景时,框会掉下来。当我再次点击时,框架站起来。动画很流畅,但是当我在不同位置多次点击时,有时动画会跳过帧。

我在Google Chrome中的OS X上有这个错误。在Opera中测试 - 一切正常,没有错误。

show

http://jsfiddle.net/nw78myhn/1/

有人知道如何解决问题吗?

<div class="scene">
  <div class="box"></div>
</div>
.scene {
  width: 500px;
  height: 500px;
  position: absolute;
  background: #efefef;
}

.box {
  position: absolute;
  left: 250px;
  top: 100px;
  width: 70px;
  height: 140px;
  background: #000;
  transform: rotate(0deg);
  transform-origin: bottom left;
  transition: transform 600ms linear;
}

.box-transform {
  transform: rotate(-96deg);
}
$('.scene').on('click', function() {
  $('.box').toggleClass('box-transform');
});

更新

我注意到,如果transform-origin设置为.box-transform而不是.box,则不会跳帧:

http://jsfiddle.net/nw78myhn/2/

但在这种情况下,原点不是bottom left。我真的不明白为什么。

更新2 [2016年2月16日]: 此错误已在较新版本的Google Chrome中修复。无法在Chrome 48.0.2564.109

中重现

1 个答案:

答案 0 :(得分:3)

似乎是与转换单个媒体资源相关的Chrome错误。

要使您的第二个示例符合您的需求,您可以添加一个愚蠢的过渡

$('.scene').on('click', function() {
  $('.box').toggleClass('box-transform');
});
.scene {
  width: 500px;
  height: 500px;
  position: absolute;
  background: #efefef;
}

.box {
  position: absolute;
  left: 250px;
  top: 100px;
  width: 70px;
  height: 140px;
  background: #000;
  transform: rotate(0deg);
  transform-origin: bottom left;
    perspective: 1000px;
    transition-property: transform perspective;
    transition-duration: 600ms;
    transition-timing-function: linear;
    transition-delay: initial;
}

.box-transform {
  transform: rotate(-90deg);
    perspective: 1001px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="scene">
  <div class="box"></div>
</div>