JQuery के साथ अभी तक चेतन-रूपांतरण संभव नहीं है। आप ऐसा कुछ कर सकते हैं:
function AnimateRotate(angle) {
var $elem = $('#MyDiv2');
$({deg: 0}).animate({deg: angle}, {
duration: 2000,
step: function(now) {
$elem.css({
transform: 'rotate(' + now + 'deg)'
});
}
});
}
आप यहां चरण-कॉलबैक के बारे में अधिक पढ़ सकते हैं: http://api.jquery.com/animate/#step
http://jsfiddle.net/UB2XR/23/
और, btw: आप jQuery 1.7+ के साथ css3 परिवर्तनों को उपसर्ग करने की आवश्यकता नहीं है
अपडेट करें
अपने जीवन को थोड़ा आसान बनाने के लिए आप इसे jQuery- प्लगइन में लपेट सकते हैं:
$.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
अद्यतन २
मैं इसके बारे में आदेश बनाने के लिए एक सा अनुकूलित easing
, duration
और complete
तुच्छ।
$.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
धन्यवाद करने के लिए Matteo जो के साथ एक समस्या का उल्लेख किया this
complete- में -context callback
। यदि यह द्वारा तय बंधन के साथ कॉलबैक jQuery.proxy
प्रत्येक नोड पर।
मैंने अपडेट 2 से पहले संस्करण को कोड में जोड़ा है ।
अद्यतन २.२
यह एक संभावित संशोधन है यदि आप रोटेशन को आगे और पीछे टॉगल करना चाहते हैं। मैंने फंक्शन में एक स्टार्ट पैरामीटर जोड़ा और इस लाइन को बदल दिया:
$({deg: start}).animate({deg: angle}, args);
यदि किसी को सभी उपयोग के मामलों के लिए यह अधिक सामान्य बनाने का तरीका पता है, तो वे प्रारंभ डिग्री सेट करना चाहते हैं या नहीं, कृपया उचित संपादन करें।
उपयोग ... काफी सरल है!
मुख्य रूप से वांछित परिणाम तक पहुंचने के लिए आपके पास दो तरीके हैं। लेकिन पहले, आइए तर्कों पर एक नज़र डालें:
jQuery.fn.animateRotate(angle, duration, easing, complete)
"कोण" को छोड़कर, ये सभी वैकल्पिक हैं और डिफ़ॉल्ट jQuery.fn.animate
-प्रक्रियाओं में गिरावट:
duration: 400
easing: "swing"
complete: function () {}
1
यह रास्ता छोटा है, लेकिन हम जिस तर्क से गुजरते हैं, वह थोड़ा अस्पष्ट है।
$(node).animateRotate(90);
$(node).animateRotate(90, function () {});
$(node).animateRotate(90, 1337, 'linear', function () {});
2
यदि तीन से अधिक तर्क हैं, तो मैं वस्तुओं का उपयोग करना पसंद करता हूं, इसलिए यह वाक्यविन्यास मेरा पक्षधर है:
$(node).animateRotate(90, {
duration: 1337,
easing: 'linear',
complete: function () {},
step: function () {}
});