2015-01-15 2 views
1

Я использую spritesheet и ключевые кадры для анимации изображения на кнопке при нажатии.CSS-анимация onclick и reverse next onclick

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

В настоящее время я пытаюсь использовать jquery для изменения класса на кнопке для анимационного класса при нажатии, но это, похоже, не работает.

скрипку: http://jsfiddle.net/CGmCe/10295/

JS:

function animate(){ 
    $('.hi').addClass('animate-hi'); 
} 

CSS:

.hi { 
width: 50px; 
height: 72px; 
background-image: url("http://s.cdpn.io/79/sprite-steps.png"); 
} 

.animate-hi { 
    animation: play 2s steps(10); 
} 

@keyframes play { 
    from { background-position: 0px; } 
    to { background-position: -500px; } 
} 
+0

Вам необходимо включить веб-китки для разных браузеров. – Kenyanke

+0

Я испортил ваш код и сделал что-то свое. http://jsfiddle.net/CGmCe/10301/ – Kenyanke

+0

Да, я знаю, оставил их для простоты для скрипки. – Carasel

ответ

2

Убедитесь, что вы используете браузер с поддержкой анимации. Для меня это работает в Firefox.

Следующая может быть только то, что вы хотели:

http://jsfiddle.net/CGmCe/10299/

HTML

<img src="http://s.cdpn.io/79/sprite-steps.png" /> 
<button class="hi"></button> 

CSS

.hi { 
    width: 50px; 
    height: 72px; 
    background-image: url("http://s.cdpn.io/79/sprite-steps.png"); 
} 
.animate-hi { 
    animation: play 2s steps(10); 
} 
.animate-hi-reverse { 
    animation: play-reverse 2s steps(10); 
} 
@keyframes play { 
    from { background-position: 0px; } 
    to { background-position: -500px; } 
} 
@keyframes play-reverse { 
    from { background-position: -500px; } 
    to { background-position: 0px; } 
} 

JQuery

function animateButton() { 
    var button = $('.hi'); 
    if (button.hasClass('animate-hi')) { 
     button.removeClass('animate-hi').addClass('animate-hi-reverse'); 
    } 
    else if (button.hasClass('animate-hi-reverse')) { 
     button.removeClass('animate-hi-reverse').addClass('animate-hi'); 
    } 
    else { 
     button.addClass('animate-hi'); 
    } 
}; 
$(document).ready(function() { 
    $('.hi').on("click", function() { 
     animateButton(); 
    }); 
}); 
+0

Отлично, спасибо. Поскольку я упомянул, что мне нужен конечный образ после первого щелчка, чтобы быть последним изображением на спрайте, я отредактировал вашу скрипку, чтобы добавить это, а также в случае, если кто-то еще этого захочет: http://jsfiddle.net/CGmCe/ 10300 / – Carasel

0

сделать переменную-счетчик, который проверяет, если кнопка нажата или нет. И на основе значения счетчика добавить класс к элементу, например:

var counter=0; 
$('.btn').on('click',function(){ 
    if(counter=0) 
    { 
    $('.hi').addClass('animate-hi'); 
    counter = 1; 
    } 
    else 
    { 
     counter = 0; 
     $('.hi').removeClass('animate-hi'); 
    } 
}); 

Убедитесь объявить переменную счетчика вне функции. Else каждый раз, когда его значение инициализируется значением 0.

+0

Я пробовал это здесь: http://jsfiddle.net/CGmCe/10298/, но добавление класса не работает для запуска анимации. – Carasel

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