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

Скрыть div после анимации CSS3

Хотелось бы узнать, как скрыть div после набора анимации css3. Здесь мой код:

HTML

<div id='box'>
    hover me
</div>​

CSS3

#box{
 position:absolute;
 top:200px;
 left:200px;
 width:200px;
 height:150px;
 background-color:red;
}

#box:hover{
  -webkit-animation:scaleme 1s;
}

@-webkit-keyframes scaleme {
  0% { -webkit-transform: scale(1); opacity: 1; }
  100% { -webkit-transform: scale(3); opacity: 0;display:none; }
}    
​

Здесь пример jsfiddle для лучшей иллюстрации:

http://jsfiddle.net/mochatony/Pu5Jf/18/

Любая идея, как сделать, скрыть поле навсегда, лучше всего без javascript?

4b9b3361

Ответ 1

К сожалению, нет лучшего решения, использующего только CSS3. Анимации всегда возвращаются к своим значениям по умолчанию (см. В библиотеке разработчиков Safari).

Но вы можете попробовать сыграть с свойством -webkit-animation-fill-mode.

Например:

#box:hover{
  -webkit-animation:scaleme 1s;
  -webkit-animation-fill-mode: forwards;
}

Он по крайней мере не сразу возвращает поле в состояние display:block;.

Используя JavaScript, вы можете сделать это, используя событие webkitAnimationEnd.

Например:

var myBox = document.getElementById('box');
myBox.addEventListener('webkitAnimationEnd',function( event ) { myBox.style.display = 'none'; }, false);

Пример в jsFiddle

Ответ 2

Измените определение анимации на:

-webkit-animation:scaleme 1s forwards;

Это значение для режима заполнения анимации. Значение "вперед" сообщает анимации применить значения свойств, определенные в последнем исполняемом ключевом кадре после окончательной итерации анимации, до удаления стиля анимации.

Конечно, в вашем примере стиль анимации будет удален при удалении наведения. На данный момент я вижу потребность в небольшом фрагменте JavaScript для добавления класса, который запускает анимацию. Поскольку класс никогда не будет удален (пока страница не будет перезагружена), div останется скрытым.

Ответ 3

Поскольку элементы анимации CSS заканчиваются в их исходном состоянии CSS, сделайте исходное состояние скрытым, масштабируя его до нуля или удаляя его непрозрачность:

div.container {
transform: scale(0);
-webkit-transform: scale(0);
}

или

div.container {
opacity: 0;
}

Как только анимация будет завершена, div вернется к исходному CSS, который скрыт.

Ответ 4

Это может быть (вроде) разрешено без использования JavaScript. Поскольку анимации используют ключевые кадры, то, что вы просите, возможно, установив время продолжительности на слишком высокое значение, скажем 1000, и позволяя вам перейти на нижний кадр, например 0,1%.

Таким образом, анимация никогда не заканчивается и поэтому остается в форме.

#box:hover {
  -webkit-animation:scaleme 1000s;
}

@-webkit-keyframes scaleme {
  0% { -webkit-transform: scale(1); opacity: 1; }
  0.1%, 100% { -webkit-transform: scale(3); opacity: 0;display:none; }
}

1000s не обязательно в этом конкретном примере. 10s должно быть достаточно для зависания.

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

#box2:hover {
  -webkit-transition: all 1s;
  -moz-transition: all 1s;
  -o-transition: all 1s;
  transition: all 1s;  
  -moz-transform: scale(3);
  -webkit-transform: scale(3);
  opacity: 0;
}

Я разветкил вашу скрипку и изменил ее, добавив два для сравнения: http://jsfiddle.net/madr/Ru8wu/3/

(Я также добавил -moz-, потому что нет причин не делать этого. -o- или -ms- также может представлять интерес).