CSS Расчеты ключевых кадров анимации - PullRequest
0 голосов
/ 27 апреля 2020

Я работаю над анимацией ползунка css. Изначально в нем было 5 элементов, но я удалил один, поэтому теперь их 4.

У меня проблемы с вычислениями ключевых кадров. Есть небольшая пауза, когда последний элемент выдвигается, а первый снова возвращается. Все работало нормально, когда у него было 5 предметов, но удаление одного сказалось на времени.

HTML:

<div class="content-slider">
  <div class="slider">
    <div class="mask">
      <ul>
        <li class="anim1">
          <div class="quote"> Service to 200+ countries</div>
        </li>
        <li class="anim2">
          <div class="quote">Same day delivery services</div>
        </li>
        <li class="anim3">
          <div class="quote">Easy booking tools.</div>
        </li>
        <li class="anim4">
          <div class="quote">Rated great.</div>
        </li>
      </ul>
    </div>
  </div>
</div> 

CSS:

html,
body {
  font-family: 'Droid Serif', serif;
}

h1 {
  font-size: 60px;
  text-align: center;
}

.content-slider {
  width: 100%;
  height: 360px;
}

.slider {
  height: 320px;
  width: 680px;
  margin: 40px auto 0;
  overflow: visible;
  position: relative;
}

.mask {
  overflow: hidden;
  height: 320px;
}

.slider ul {
  margin: 0;
  padding: 0;
  position: relative;
}

.slider li {
  width: 680px;
  height: 320px;
  position: absolute;
  right: -325px;
  list-style: none;
}

.slider .quote {
  font-size: 40px;
  font-style: italic;
  text-align:center;
}

.slider li.anim1 {
  animation: cycle 12s linear infinite;
}

.slider li.anim2 {
  animation: cycle2 12s linear infinite;
}

.slider li.anim3 {
  animation: cycle3 12s linear infinite;
}

.slider li.anim4 {
  animation: cycle4 12s linear infinite;
}

@keyframes cycle {
  0% {
    right: 0px;
  }
  4% {
    right: 0px;
  }
  16% {
    right: 0px;
    opacity: 1;
    z-index: 0;
  }
  20% {
    right: 325px;
    opacity: 0;
    z-index: 0;
  }
  21% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
  50% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
  92% {
    right: -325px;
    opacity: 0;
    z-index: 0;
  }
  96% {
    right: -325px;
    opacity: 0;
  }
  100% {
    right: 0px;
    opacity: 1;
  }
}

@keyframes cycle2 {
  0% {
    right: -325px;
    opacity: 0;
  }
  16% {
    right: -325px;
    opacity: 0;
  }
  20% {
    right: 0px;
    opacity: 1;
  }
  24% {
    right: 0px;
    opacity: 1;
  }
  36% {
    right: 0px;
    opacity: 1;
    z-index: 0;
  }
  40% {
    right: 325px;
    opacity: 0;
    z-index: 0;
  }
  41% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
  100% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
}

@keyframes cycle3 {
  0% {
    right: -325px;
    opacity: 0;
  }
  36% {
    right: -325px;
    opacity: 0;
  }
  40% {
    right: 0px;
    opacity: 1;
  }
  44% {
    right: 0px;
    opacity: 1;
  }
  56% {
    right: 0px;
    opacity: 1;
    z-index: 0;
  }
  60% {
    right: 325px;
    opacity: 0;
    z-index: 0;
  }
  61% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
  100% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
}

@keyframes cycle4 {
  0% {
    right: -325px;
    opacity: 0;
  }
  56% {
    right: -325px;
    opacity: 0;
  }
  60% {
    right: 0px;
    opacity: 1;
  }
  64% {
    right: 0px;
    opacity: 1;
  }
  76% {
    right: 0px;
    opacity: 1;
    z-index: -1;
  }
  80% {
    right: 325px;
    opacity: 0;
    z-index: -1;
  }
  81% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
  100% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
}

Это последняя анимация cycle4, которую я пытался настроить, но у меня не получается получить плавный переход от последней к первой работе, какой она была.

Вот пример кода

1 Ответ

0 голосов
/ 28 апреля 2020

Если вы хотите, чтобы ваша анимация длилась 12 с, вам нужно понять, что с 4 предметами у каждого элемента есть 3 с времени анимации, и что каждые 1 с анимации составляют 8,33333% от общего времени анимации.

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

calculation

Затем вы можете легко увидеть процентное соотношение ваших ключевых кадров при изменении параметров, таких как длина анимации и время входа / выхода. Во всяком случае, вот фрагмент:

html,
body {
  font-family: 'Droid Serif', serif;
}

h1 {
  font-size: 60px;
  text-align: center;
}

.content-slider {
  width: 100%;
  height: 360px;
}

.slider {
  height: 320px;
  width: 680px;
  margin: 40px auto 0;
  overflow: visible;
  position: relative;
}

.mask {
  overflow: hidden;
  height: 320px;
}

.slider ul {
  margin: 0;
  padding: 0;
  position: relative;
}

.slider li {
  width: 680px;
  height: 320px;
  position: absolute;
  right: -325px;
  list-style: none;
}

.slider .quote {
  font-size: 40px;
  font-style: italic;
  text-align: center;
}

.slider li.anim1 {
  animation: cycle 12s linear infinite;
}

.slider li.anim2 {
  animation: cycle2 12s linear infinite;
}

.slider li.anim3 {
  animation: cycle3 12s linear infinite;
}

.slider li.anim4 {
  animation: cycle4 12s linear infinite;
}

@keyframes cycle {
  0% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
  4.2% {
    right: 0px;
    opacity: 1;
    z-index: 0;
  }
  20.8% {
    right: 0px;
    opacity: 1;
  }
  25% {
    right: 325px;
    opacity: 0;
    z-index: -1;
  }
  100% {
    right: -325px;
    opacity: 0;
  }
}

@keyframes cycle2 {
  0% {
    right: -325px;
    opacity: 0;
  }
  25% {
    right: -325px;
    opacity: 0;
  }
  29.2% {
    right: 0px;
    opacity: 1;
  }
  45.8% {
    right: 0px;
    opacity: 1;
  }
  50% {
    right: 325px;
    opacity: 0;
    z-index: -1;
  }
  100% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
}

@keyframes cycle3 {
  0% {
    right: -325px;
    opacity: 0;
  }
  50% {
    right: -325px;
    opacity: 0;
  }
  54.2% {
    right: 0px;
    opacity: 1;
  }
  70.8% {
    right: 0px;
    opacity: 1;
  }
  75% {
    right: 325px;
    opacity: 0;
    z-index: -1;
  }
  100% {
    right: -325px;
    opacity: 0;
    z-index: -1;
  }
}

@keyframes cycle4 {
  0% {
    right: -325px;
    opacity: 0;
  }
  74.99% {
    right: -325px;
    opacity: 0;
  }
  79.2% {
    right: 0px;
    opacity: 1;
  }
  95.8% {
    right: 0px;
    opacity: 1;
  }
  100% {
    right: 325px;
    opacity: 0;
    z-index: -1;
  }
}
<div class="content-slider">
  <div class="slider">
    <div class="mask">
      <ul>

        <li class="anim1">
          <div class="quote"> Service to 200+ countries</div>
        </li>
        <li class="anim2">
          <div class="quote">Same day delivery services</div>
        </li>
        <li class="anim3">
          <div class="quote">Easy booking tools.</div>
        </li>
        <li class="anim4">
          <div class="quote">Rated great.</div>
        </li>


      </ul>
    </div>
  </div>
</div>
...