CSS结束关键帧循环动画,并使其重新动画以开始

时间:2018-11-08 00:53:56

标签: css css-animations keyframe

我有一个循环动画,可以旋转一个正方形。当我删除启用动画的类时,正方形立即回到起始位置。

在JS事件中,我需要能够将方块动画化回到起始位置。

这里是codepen

我尝试向该元素添加一个转换,然后切换到另一个关键帧动画,但均无效果。

html:

<div class="container">
  <div class="animate rotating"></div>
</div>

css:

.container{
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: #333;
}

.animate{
  width: 100px;
  height: 100px;
  background-color: red;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -50px 0 0 -50px;
  transform: all 2s ease;
}

@keyframes rotating {
  0%{transform: rotate(30deg);}
  50%{transform: rotate(-30deg);}
  100%{transform: rotate(30deg);}
}

.rotating {
  animation: rotating 6s ease-in-out infinite forwards;
  animation-delay: -2s;
}

jquery:

$('.animate').click(function(){
  $(this).removeClass('rotating');
});

1 个答案:

答案 0 :(得分:1)

您的代码有一个小问题:

transform: all 2s ease;

您错误地输入了转换,但是我很确定这种方法不会起作用。如果您愿意使用jQuery完成此操作,则可以进行当前旋转并将其应用于您的元素:

function getRotationDegrees(obj) {
    var matrix = obj.css("-webkit-transform") ||
    obj.css("-moz-transform")    ||
    obj.css("-ms-transform")     ||
    obj.css("-o-transform")      ||
    obj.css("transform");
    if(matrix !== 'none') {
        var values = matrix.split('(')[1].split(')')[0].split(',');
        var a = values[0];
        var b = values[1];
        var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
    } else { var angle = 0; }
    return (angle < 0) ? angle + 360 : angle;
}

$('.animate').click(function(){
  var el = $(this);
  var elRotate = getRotationDegrees(el);
  el.css('transform',`rotate(${elRotate}deg)`);
  el.removeClass('rotating');
  // set new transform here
});

这将冻结元素的旋转,您可以在最后设置所需的旋转并应用过渡。