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

Выполнить анимацию CSS3 только один раз (при загрузке страницы)

Я делаю простую целевую страницу, управляемую CSS3. Чтобы это выглядело потрясающе, <a>:

@keyframes splash {
    from {
        opacity: 0;
        transform: scale(0, 0);
    }
    50% {
        opacity: 1;
        transform: scale(1.1, 1.1);
    }
    to {
        transform: scale(1, 1);
    }
}

И чтобы сделать его еще более удивительным, я добавил анимацию при наведении:

@keyframes hover {
    from {
        transform: scale(1, 1);
    }
    to {
        transform: scale(1.1, 1.1);
    }
}

Но возникает проблема! Я назначил анимацию так:

a {
    /* Some basic styling here */

    animation: splash 1s normal forwards ease-in-out;
}
a:hover {
    animation: hover 1s infinite alternate ease-in-out;
}

Все работает просто отлично: <a> попадает в лицо пользователя и дает приятную вибрацию, когда он наводит на него курсор. Бит, как только пользователь размывает <a> сглаживание заканчивается внезапно, и <a> повторяет splash -animation. (Что логично для меня, но я не хочу этого) Есть ли какой-нибудь способ решить эту проблему без какой-либо Jiggery Pokery класса JavaScript?

4b9b3361

Ответ 1

После нескольких часов поиска: Нет, это невозможно без JavaScript. animation-iteration-count: 1; внутренне сохраняется в атрибуте animation shothand, который сбрасывается и перезаписывается на :hover. Когда мы размываем <a> и освобождаем :hover, старый класс снова применяет и, следовательно, снова сбрасывает атрибут animation.

Там, к сожалению, нет способа сохранить определенные состояния атрибутов в состояниях элементов.

Вам нужно будет использовать JavaScript.

Ответ 2

Это можно сделать с небольшим количеством дополнительных накладных расходов.

Просто оберните свою ссылку в div и отделите анимацию.

html..

<div class="animateOnce">
    <a class="animateOnHover">me!</a>
</div>

.. и css..

.animateOnce {
    animation: splash 1s normal forwards ease-in-out;
}

.animateOnHover:hover {
    animation: hover 1s infinite alternate ease-in-out;
}

Ответ 3

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

animation-iteration-count: 1

в стиле для A.

Ответ 4

Я только что начал работать над Firefox и Chrome. Вы просто добавляете/удаляете класс ниже в соответствии с вашими потребностями.

.animateOnce {
  -webkit-animation: NAME-OF-YOUR-ANIMATION 0.5s normal forwards; 
  -moz-animation:    NAME-OF-YOUR-ANIMATION 0.5s normal forwards;
  -o-animation:      NAME-OF-YOUR-ANIMATION 0.5s normal forwards;
}

Ответ 5

Следующий код без "iteration-count: 1" приводил к тому, что все позиции пульсировали после ввода, до последнего загруженного элемента, даже если "pulse" не использовался.

<li class="animated slideInLeft delay-1s animation-iteration-count: 1"><i class="fa fa-credit-card" aria-hidden="true"></i> 1111</li>


<li class="animated slideInRight delay-1-5s animation-iteration-count: 1"><i class="fa fa-university" aria-hidden="true"></i> 222222</li>

<li class="animated lightSpeedIn delay-2s animation-iteration-count: 1"><i class="fa fa-industry" aria-hidden="true"></i> aaaaaa</li>

<li class="animated slideInLeft delay-2-5s animation-iteration-count: 1"><i class="fa fa-key" aria-hidden="true"></i> bbbbb</li>

<li class="animated slideInRight delay-3s animation-iteration-count: 1"><i class="fa fa-thumbs-up" aria-hidden="true"></i> ccccc</li>

Ответ 6

количество итераций анимации: 1; ?

Ответ 7

Для вышеупомянутого запроса примените ниже CSS для

animation-iteration-count: 1