2015-10-19 2 views
3

Когда я использую это:jquery: addClass, removeClass: анимация работает только один раз: почему?

$("#passwordConfig").removeClass('shake animated').addClass('shake animate'); 

Это работает только один раз.

Мне нужно добавить немного времени, чтобы заставить его работать столько раз, сколько я хочу!

$("#passwordConfig").removeClass('shake animated'); 
        setTimeout(function() { 
         $("#passwordConfig").addClass('shake animated'); 
        }, 50); 

Любая идея, почему?

CSS:

.animated { 
    -webkit-animation-duration: 1s; 
    animation-duration: 1s; 
    -webkit-animation-fill-mode: both; 
    animation-fill-mode: both; 
} 

@-webkit-keyframes shake { 
    0%, 100% { 
    -webkit-transform: translate3d(0, 0, 0); 
    transform: translate3d(0, 0, 0); 
    } 

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

    20%, 40%, 60%, 80% { 
    -webkit-transform: translate3d(10px, 0, 0); 
    transform: translate3d(10px, 0, 0); 
    } 
} 

@keyframes shake { 
    0%, 100% { 
    -webkit-transform: translate3d(0, 0, 0); 
    transform: translate3d(0, 0, 0); 
    } 

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

    20%, 40%, 60%, 80% { 
    -webkit-transform: translate3d(10px, 0, 0); 
    transform: translate3d(10px, 0, 0); 
    } 
} 

.shake { 
    -webkit-animation-name: shake; 
    animation-name: shake; 
} 
+0

Е., попробуйте [.toggleClass()] (http://jsfiddle.net/turbopipp/kzhx9ur4/) – turbopipp

+1

Это потому, что нет щ перекрашивать не называется между классами –

ответ

3

Это происходит потому, что removeClass и addClass происходит так быстро, что не позволяет DOM нагнать на слово. Вы можете сделать что-то вроде этого, если вы действительно ненавидите SetTimeout:

$("#passwordConfig").removeClass('shake animated').delay(50).queue(
    function (next) { 
     $(this).addClass('shake animated'); 
     next(); 
    } 
); 

http://jsfiddle.net/51dwhd2o/

Переключить класс тоже хорошо, но, кажется, как она будет работать только каждый второй вызов тумблера.

+1

поворотных Нет необходимости задержать его, просто заставить щ перекрасить в некоторых путь между переключающими классами, например, http://jsfiddle.net/51dwhd2o/1/ Я не могу протестировать его в настоящее время в другом браузере, чем хром, но браузеры webkit, как известно, оптимизируют перепрофилирование ui, иногда слишком много, как кажется, здесь –

+1

О, круто, я не знал, что это сработает. Узнал что-то, отвечая! Всегда здорово. Благодаря! Хотя в jQuery 3.0 не думаю, что это будет работать без какого-либо времени. Я знаю, что они сделали огромные изменения, чтобы скрыть шоу в последней версии. – AtheistP3ace

+1

Ya on jq 3.x (и 1.x, как я могу проверить его) должен быть '.hide(). Show (0)' или любым лучшим способом, которым я не знаю, чтобы заставить перерисовать ui –

Смежные вопросы