CSS Dönüşümlerini jQuery ile canlandırmak henüz mümkün değildir. Bunun gibi bir şey yapabilirsiniz:
function AnimateRotate(angle) {
var $elem = $('#MyDiv2');
$({deg: 0}).animate({deg: angle}, {
duration: 2000,
step: function(now) {
$elem.css({
transform: 'rotate(' + now + 'deg)'
});
}
});
}
Adım adım geri arama hakkında daha fazla bilgiyi burada bulabilirsiniz: http://api.jquery.com/animate/#step
http://jsfiddle.net/UB2XR/23/
Ve btw: jQuery 1.7+ ile css3 dönüşümlerinin önekini almanıza gerek yok
Güncelleme
Hayatınızı biraz daha kolaylaştırmak için bunu bir jQuery eklentisine sarabilirsiniz:
$.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
Güncelleme2
Ben sırasını yapmak bunu biraz optimize easing
, duration
ve complete
önemsiz.
$.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);
});
};
2.1 Güncellemesi
Teşekkür etmek Matteo ile bir sorunu kaydetti kim this
Konuyu tamamlamak içinde şartına callback
. Geri aramayı her düğümde ile bağlayarak düzeltildiyse jQuery.proxy
.
Sürümü koda Güncelleme 2'den daha önce ekledim .
2.2 Güncellemesi
Dönüşü ileri geri değiştirmek gibi bir şey yapmak istiyorsanız, bu olası bir değişikliktir. İşleve bir başlangıç parametresi ekledim ve bu satırı değiştirdim:
$({deg: start}).animate({deg: angle}, args);
Başlama derecesi belirlemek isteyip istemediğine bakılmaksızın, bunu tüm kullanım durumları için nasıl daha genel hale getireceğini bilen biri varsa, lütfen uygun düzenlemeyi yapın.
Kullanım ... oldukça basit!
Esas olarak istenen sonuca ulaşmak için iki yolunuz vardır. Ama ilk önce argümanlara bir göz atalım:
jQuery.fn.animateRotate(angle, duration, easing, complete)
"Açı" dışında hepsi isteğe bağlıdır ve varsayılan jQuery.fn.animate
özelliklere geri döner:
duration: 400
easing: "swing"
complete: function () {}
1 inci
Bu yol kısadır, ancak daha fazla argüman aktardıkça biraz belirsiz görünüyor.
$(node).animateRotate(90);
$(node).animateRotate(90, function () {});
$(node).animateRotate(90, 1337, 'linear', function () {});
2.
Üçten fazla argüman varsa nesneleri kullanmayı tercih ederim, bu nedenle bu sözdizimi benim favorim:
$(node).animateRotate(90, {
duration: 1337,
easing: 'linear',
complete: function () {},
step: function () {}
});