Transformacje CSS nie są jeszcze możliwe do animacji za pomocą jQuery. Możesz zrobić coś takiego:
function AnimateRotate(angle) {
var $elem = $('#MyDiv2');
$({deg: 0}).animate({deg: angle}, {
duration: 2000,
step: function(now) {
$elem.css({
transform: 'rotate(' + now + 'deg)'
});
}
});
}
Możesz przeczytać więcej o step-callback tutaj: http://api.jquery.com/animate/#step
http://jsfiddle.net/UB2XR/23/
Przy okazji: nie musisz poprzedzać transformacji css3 jQuery 1.7+
Aktualizacja
Możesz owinąć to w wtyczkę jQuery, aby trochę ułatwić sobie życie:
$.fn.animateRotate = function(angle, duration, easing, complete) {
return this.each(function() {
var $elem = $(this);
$({deg: 0}).animate({deg: angle}, {
duration: duration,
easing: easing,
step: function(now) {
$elem.css({
transform: 'rotate(' + now + 'deg)'
});
},
complete: complete || $.noop
});
});
};
$('#MyDiv2').animateRotate(90);
http://jsbin.com/ofagog/2/edit
Aktualizacja2
I zoptymalizowany go trochę, aby kolejność easing
, duration
i complete
nieistotne.
$.fn.animateRotate = function(angle, duration, easing, complete) {
var args = $.speed(duration, easing, complete);
var step = args.step;
return this.each(function(i, e) {
args.complete = $.proxy(args.complete, e);
args.step = function(now) {
$.style(e, 'transform', 'rotate(' + now + 'deg)');
if (step) return step.apply(e, arguments);
};
$({deg: 0}).animate({deg: angle}, args);
});
};
Aktualizacja 2.1.0
Podziękowania dla Matteo, który zauważył problem z this
-context in the complete- callback
. Jeśli naprawiono to przez powiązanie wywołania zwrotnego z jQuery.proxy
każdym węzłem.
Dodałem edycję do kodu wcześniej z Update 2 .
Aktualizacja 2.2.0
Jest to możliwa modyfikacja, jeśli chcesz wykonać coś takiego, jak przełączanie rotacji w przód iw tył. Po prostu dodałem parametr start do funkcji i zastąpiłem tę linię:
$({deg: start}).animate({deg: angle}, args);
Jeśli ktoś wie, jak uczynić to bardziej ogólnym dla wszystkich przypadków użycia, niezależnie od tego, czy chce ustawić stopień początkowy, proszę dokonać odpowiedniej edycji.
Użycie ... jest dość proste!
Zwykle masz dwa sposoby na osiągnięcie pożądanego rezultatu. Najpierw jednak spójrzmy na argumenty:
jQuery.fn.animateRotate(angle, duration, easing, complete)
Z wyjątkiem „angle”, wszystkie są opcjonalne i jQuery.fn.animate
zastępują domyślne właściwości:
duration: 400
easing: "swing"
complete: function () {}
1
Ten sposób jest krótki, ale wydaje się nieco niejasny, im więcej argumentów przekazujemy.
$(node).animateRotate(90);
$(node).animateRotate(90, function () {});
$(node).animateRotate(90, 1337, 'linear', function () {});
2nd
Wolę używać obiektów, jeśli jest więcej niż trzy argumenty, więc ta składnia jest moją ulubioną:
$(node).animateRotate(90, {
duration: 1337,
easing: 'linear',
complete: function () {},
step: function () {}
});