2016-06-30 4 views
2

Эффект, который я собираюсь сделать: -wiggle несколько раз и прекратить шевелить. Делайте это поведение периодически, пока мышь не наведет. -На ходу, покачивание движения полностью прекращается. -все переходы сглажены. Я пробовал с ключевыми кадрами -webkit-animation, но используя -webkit-animation-timing-функцию, чтобы облегчить переход, когда мышь зависала, не работала. Кроме того, я теряюсь на том, как добиться движения по периоду: покачивать, останавливать и покачивать. Я был бы признателен, если бы вы могли указать в правильном направлении.CSS wiggle/shake effect

+0

Отметьте «Animate.css», это CSS-фреймворк для анимаций, созданных Dan Eden. Крейг Деннис расширил эту фреймворку с помощью плагина jquery, чтобы вы могли легко связать крючки на звезду/стоп и задержки между анимациями. Использование двух в сочетании должно позволить вам достичь вибрации/остановки/покачивания еще одной функции, которую вы хотите. –

+0

animate.css на самом деле очень хорош и предлагает большую гибкость. Я могу просто изучить их код, чтобы получить основные принципы. благодаря! –

ответ

4

Попробуйте один из следующих действий:

.class:hover { 
    animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; 
    transform: translate3d(0, 0, 0); 
    backface-visibility: hidden; 
    perspective: 1000px; 
} 

@keyframes shake { 
    10%, 90% { 
    transform: translate3d(-1px, 0, 0); 
    } 

    20%, 80% { 
    transform: translate3d(2px, 0, 0); 
    } 

    30%, 50%, 70% { 
    transform: translate3d(-4px, 0, 0); 
    } 

    40%, 60% { 
    transform: translate3d(4px, 0, 0); 
    } 
} 

https://css-tricks.com/snippets/css/shake-css-keyframe-animation/

или Добавьте это в скрипте: <link type="text/css" href="https://rawgit.com/elrumordelaluz/csshake/master/dist/csshake.min.css"></link>

и добавить класс к элементу вы хотите встряхнуть

Полная документация здесь: https://elrumordelaluz.github.io/csshake/

3

Вот простая анимация покачивания, которая останавливается, когда вы наводите на нее курсор.

Для того, чтобы добиться задержек между колебаниями, вы можете просто включить «пустой кусок» анимации ... то есть период, в течение которого ничего не меняется. В моем примере ничего не меняется между отметкой 0% и 80%, а «покачивание» происходит только в последних 20% (что заканчивается на половину секунды).

@keyframes wiggle { 
 
    0% { transform: rotate(0deg); } 
 
    80% { transform: rotate(0deg); } 
 
    85% { transform: rotate(5deg); } 
 
    95% { transform: rotate(-5deg); } 
 
    100% { transform: rotate(0deg); } 
 
} 
 

 
h1.wiggle { 
 
    display: inline-block; 
 
    animation: wiggle 2.5s infinite; 
 
} 
 

 
h1.wiggle:hover { 
 
    animation: none; 
 
}
<h1 class="wiggle"> 
 
    wiggle, wiggle 
 
</h1>

К сожалению, это не учитывает «ослабление» обратно в ун-пошевелила состояния при наведении на него в середине анимации. Для этого может потребоваться немного JavaScript.

+0

спасибо! он все еще решает одну часть моей проблемы, которая контролирует периодичность анимации. Я думал, что css будет достаточно для облегчения анимации. Как вы будете работать в javascript? –

+0

@SangamChouchan я думал, CSS тоже будет достаточно. Я думал, что добавление «перехода: преобразование 0,5 сек» в класс «h1.wiggle» приведет к тому, что он будет освобожден от анимации, но он, похоже, не работает. Я сейчас экспериментирую с javascript-решением. –