CSS анимация, воспроизведение, а затем обратная анимация при наведении - PullRequest
0 голосов
/ 27 апреля 2018

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

@keyframes growN {
    from {width: 0px;}
    to {width: 21vw;}
}

Я хотел бы добавить вторую анимацию, которая еще больше расширяет div (до фиксированного значения) при наведении курсора и возвращает его к исходной ширине (анимация загрузки после страницы) при наведении (un-hover?). Примерно так:

@keyframes hover_grow {
    from {width: element.width;}
    to {width: 50vw;}
}

Так как есть много div, я бы предпочел не делать математику самостоятельно (отдельная анимация для каждого div, с собственной шириной вместо element.width).

Я пробовал следующее:

bar:hover {
    -webkit-animation-name: hover_grow;
    -webkit-animation-duration: 0.1s;
    -webkit-animation-timing-function: ease-out;
    -webkit-animation-direction: alternate;
    animation-name: grow;
    animation-duration: 1s;
    animation-timing-function: ease-out;
    animation-direction: alternate;
}

@-webkit-keyframes hover_grow {
    from {width: initial;}
    to {width: 25vw;}
}

@keyframes hover_grow {
    from {width: initial;}
    to {width: 25vw;}
}

Это работает при наведении - div расширяется дальше, но при de-hover он возвращает его к загрузке страницы, предварительно настроенному значению анимации (т.е. 0), и анимация загрузки страницы снова запускается. Кроме того, время, кажется, игнорируется.

JSFiddle: https://jsfiddle.net/an1o4brL/3/

1 Ответ

0 голосов
/ 27 апреля 2018

Один из способов обойти это - использовать обертку, анимировать первоначальный вид, затем увеличивать и уменьшать обертку при наведении, ребенок будет следовать ширине своего родителя,

другое мудрое использование js

#bar4 {
  height: 30px;
  transition: width .5s linear;
  display: block;
  animation-name: grow4;
  animation-duration: .5s;
  animation-timing-function: ease-out;
  animation-iteration-count: 1;
  background-color: white;
  border: 2px solid #5e0734;
  margin-top: 0.15vh;
  margin-bottom: 0.15vh;
  margin-left: 0.5vh;
  overflow: hidden;
}

@keyframes grow4 {
  from {
    width: 0;
  }
  to {
    width: 100%;
  }
}

#bar4Wrap {
  width: 21vw;
  transition: width .5s linear;
}

#bar4Wrap:hover {
  width: 100%;
}
<div id="bar4Wrap">
  <a href="link" id="bar4">Link</a>
</div>
...