CSS Завершить анимацию цикла ключевого кадра и вернуть ее к началу. - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть циклическая анимация, которая вращает квадрат.Когда я удаляю класс, который включает анимацию, квадрат мгновенно возвращается в исходное положение.

Мне нужно иметь возможность анимировать квадрат обратно в исходное положение в событии JS.

Вот кодовое выражение .

Я пытался добавить преобразование к элементу и переключиться на другую анимацию ключевого кадра, но ни один из них не работал.

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 голосов
/ 08 ноября 2018

Есть небольшая проблема с вашим кодом:

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
});

Это остановит вращение вашего элемента, вы можете установить желаемое вращение в конце, и переход будет применен.

...