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

Как отменить анимацию на мыши после зависания

Таким образом, на мыши можно иметь обратную анимацию, например:

.class{
   transform: rotate(0deg);

}
.class:hover{
   transform: rotate(360deg);
}

но при использовании анимации @keyframes я не мог заставить его работать, например:

.class{
   animation-name: out;
   animation-duration:2s;

}
.class:hover{
   animation-name: in;
   animation-duration:5s;
   animation-iteration-count:infinite;

}
@keyframe in{
    to {transform: rotate(360deg);}
}

@keyframe out{
    to {transform: rotate(0deg);}
}

Какое оптимальное решение, зная, что мне нужны итерации и анимация?

http://jsfiddle.net/khalednabil/eWzBm/

4b9b3361

Ответ 1

Я думаю, что если у вас есть to, вы должны использовать from. Я бы подумал о чем-то вроде:

@keyframe in {
    from: transform: rotate(0deg);
    to: transform: rotate(360deg);
}

@keyframe out {
    from: transform: rotate(360deg);
    to: transform: rotate(0deg);
}

Конечно, он должен был проверить его уже, но мне показалось странным, что вы используете только свойство transform, так как CSS3 не полностью реализуется повсюду. Возможно, он будет работать лучше со следующими соображениями:

  • Chrome использует @-webkit-keyframes, не требуется какая-либо особенная версия
  • Safari использует @-webkit-keyframes, так как версия 5 +
  • Firefox использует @keyframes, поскольку версия 16 (v5-15 используется @-moz-keyframes)
  • Opera использует @-webkit-keyframes версию 15-22 (только v12 используется @-o-keyframes)
  • Internet Explorer использует @keyframes с версии 10 +

ИЗМЕНИТЬ:

Я придумал эту скрипку:

http://jsfiddle.net/JjHNG/35/

Использование минимального кода. Это приближается к тому, что вы ожидаете?

Ответ 2

Я не думаю, что это возможно, используя только анимации CSS. Я предполагаю, что переходы CSS не выполняют выполнение вашего прецедента, потому что (например) вы хотите объединить две анимации вместе, использовать несколько остановок, итераций или каким-то другим образом использовать дополнительный синергетический грант вы.

Я не нашел способа вызвать анимацию CSS специально для мыши без использования JavaScript для добавления классов "сверху" и "вне". Хотя вы можете использовать базовое объявление CSS, запускающее анимацию при завершении: hover, эта же анимация будет запускаться при загрузке страницы. Используя классы "over" и "out", вы можете разделить определение на базовую (нагрузку) декларацию и две объявления анимации-триггера.

CSS для этого решения будет:

.class {
    /* base element declaration */
}
.class.out {
   animation-name: out;
   animation-duration:2s;

}
.class.over {
   animation-name: in;
   animation-duration:5s;
   animation-iteration-count:infinite;
}
@keyframes in {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}
@keyframes out {
    from {
        transform: rotate(360deg);
    }
    to {
        transform: rotate(0deg);
    }
}

И используя JavaScript (синтаксис jQuery) для привязки классов к событиям:

$(".class").hover(
    function () {
        $(this).removeClass('out').addClass('over');
    },
    function () {
        $(this).removeClass('over').addClass('out');
    }
);

Ответ 3

Это намного проще, чем все это: просто перейдите к тому же свойству на свой элемент

.earth { width:  0.92%;    transition: width 1s;  }
.earth:hover { width: 50%; transition: width 1s;  }

https://codepen.io/lafland/pen/MoEaoG

Ответ 4

Было бы лучше, если бы у вас была только одна анимация, но с ее отменой?

animation-direction: reverse

Ответ 5

Попробуйте следующее:

@keyframe in {
from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
@keyframe out {
from {
    transform: rotate(360deg);
  }
  to {
    transform: rotate(0deg);
  }
}

поддерживается в Firefox 5+, IE 10+, Chrome, Safari 4+, Opera 12 +