【问题标题】:CSS End a keyframe looping animation and have it animate back to startCSS 结束一个关键帧循环动画并让它重新开始动画
【发布时间】:2018-11-08 10:37:23
【问题描述】:

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

我需要能够在 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');
});

【问题讨论】:

    标签: css css-animations keyframe


    【解决方案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
    });
    

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

    【讨论】:

    • 花了我一秒钟的时间来理解它,但它真的很好用,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多