Подтвердить что ты не робот

Задержка анимации CSS и поведение игрового состояния

Я пытаюсь захватить определенный момент в анимации элементов. Значение. Я хочу, чтобы анимация начала и остановилась в точке X (позволяет начать и остановить вторую 5 из 100-секундной анимации).

Вот мой снимок JSFiddle

@-webkit-keyframes background {
  from { background: yellow; }
  100% {
    background: blue;
  }
}

div {
  -webkit-animation-name: background;
  -webkit-animation-duration: 100s;
  -webkit-animation-fill-mode: forwards;
  -webkit-animation-delay: -40s;
  -webkit-animation-play-state: paused;
}

Это, кажется, отлично работает в Chrome и Firefox, но, похоже, не работает в Safari и IE (нет, правильно?!) Примечание. Я оставил префикс специально для его проверки в Safari.

В отличие от Chrome, кажется, что анимация никогда не запускается в Safari и остается на начальном шаге.

Это известная проблема? Есть ли способ обхода или другой способ реализовать это?

ОБНОВЛЕНИЕ/РАЗЪЯСНЕНИЯ

Мне нужно, чтобы уметь фиксировать конкретную рамку анимации. Откройте мою скрипку в Chrome и поиграйте с атрибутом задержки анимации в моей скрипке (убедитесь, что она осталась отрицательной). Вы увидите, что вы можете поймать 1 конкретный кадр анимации. Это именно то, что мне нужно. Моя проблема в том, что это не работает в Safari.

4b9b3361

Ответ 1

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

Поскольку масштаб анимации для времени в процентах, мы можем вычислить, что 100 мс /5000 мс равно 2%/100%.

div {
    background:#333;
    padding:10px;
    width:100px;
    height:100px;
    color:#fff;
    animation-name: animateAndPause;
    animation-duration: 5s;
    animation-iteration-count: infinite;
}
@keyframes animateAndPause {
    0% { 
     -ms-transform: rotate(0deg); /* IE 9 */
     -webkit-transform: rotate(0deg); /* Chrome, Safari, Opera */
     transform: rotate(0deg);
    }
    98% {      
     -ms-transform: rotate(360deg); /* IE 9 */
     -webkit-transform: rotate(360deg); /* Chrome, Safari, Opera */
     transform: rotate(360deg); 
    }   
   100% { 
     -ms-transform: rotate(360deg); /* IE 9 */
     -webkit-transform: rotate(360deg); /* Chrome, Safari, Opera */
     transform: rotate(360deg);    
    }
}

для демонстрации, jsfiddle имеет более длительную паузу, 500 мс.

https://jsfiddle.net/bfu9wvxt/5/

Ответ 2

Если вы хотите, чтобы ваша анимация останавливалась и начиналась с определенной точки, вам нужно больше ключевых кадров:

@-webkit-keyframes background {
    0% { background: yellow; }
    /* When You Want */% { background: /* A different color in-between yellow and blue! */; }
    /* When You Want */% { background: /* A different color in-between yellow and blue! */; }
    100% { background: blue; }
}
div {
    -webkit-animation-name: background;
    -webkit-animation-duration: 100s;
    -webkit-animation-timing-function: ease;
}

Замените первый /* When You Want */% на процент от продолжительности анимации, где вы хотите остановить.

Замените второй /* When You Want */% на процент от продолжительности анимации, когда вы хотите, чтобы он начинался снова.

Замените оба вхождения /* A different color in-between yellow and blue! */ тем же цветом, цвет между желтым и синим.

Ответ 3

Попробуйте этот код: Совместим со всеми браузерами, особенно сафари.

div {
  width: 100%;
  background-color: #fff;
  position: relative;
  -webkit-animation-name: example;
  /* Chrome, Safari, Opera */
  -webkit-animation-duration: 5s;
  /* Chrome, Safari, Opera */
  -webkit-animation-delay: 5s;
  /* Chrome, Safari, Opera */
  animation-name: example;
  animation-duration: 5s;
  animation-delay: 5s;
  -webkit-animation-iteration-count: 100;
  /* Chrome, Safari, Opera */
  animation-iteration-count: 100;
  
}
/* Chrome, Safari, Opera */

@-webkit-keyframes example {
  25% {
    background-color: blue;
  }
  50% {
    background-color:yellow ;
  }
  25% {
    background-color: yellow;
  }
  50% {
    background-color: blue;
  }
}
/* Standard syntax */

@keyframes example {
  25% {
    background-color: blue;
  }
  50% {
    background-color:yellow ;
  }
  25% {
    background-color: yellow;
  }
  50% {
    background-color: blue;
  }
}
<div>Color bar</div>

Ответ 4

Это должно работать в Safari: Fiddle

    @-webkit-keyframes change {
      0% { background-color: yellow; }
      100% { background-color: blue; }
    }

    div {
        -webkit-animation-name: change;
        -webkit-animation-delay: 0s;
        -webkit-animation-duration: 5s;
        -webkit-animation-play-state: running;
        -webkit-animation-timing-function: cubic-bezier(0.29, 0.3, 0.86, 0.99);
    }

Игра с кривой кубического безье может повторить анимацию остановки, начиная с 5 секунд из 100, но будет довольно сложно начать и остановить анимацию без javascript.