2012-01-09 10 views
6

आप एनीमेशन अवधि सेट करके और CSS3 ट्रांसफॉर्म के प्रारंभिक और अंतिम मानों को सेट करके हार्डवेयर त्वरित एनिमेशन का लाभ उठा सकते हैं।जावास्क्रिप्ट नियम के साथ हार्डवेयर त्वरण के साथ CSS3 रूपांतरण के मूल्य को एनिमेट करना क्या करता है?

क्या होगा यदि एनीमेशन अवधि निर्धारित करने और कीफ्रेम का उपयोग करने के बजाय, आप जावास्क्रिप्ट के साथ वांछित CSS3 ट्रांसफॉर्म के मूल्य को एनिमेट करते हैं? क्या आप अभी भी हार्डवेयर त्वरण का लाभ उठा रहे हैं, या हार्डवेयर त्वरण से इंकार कर दिया गया है?

+1

विश्लेषण क्यों सीएसएस की तुलना में jQuery रास्ता धीमा है: http://css3.bradshawenterprises.com/demos/speed.php। जब jQuery बहुत सारे ब्लॉक होते हैं तो jQuery संस्करण मेरे दोहरे कोर CPU पर भी एनिमेट नहीं करता है! – JoJo

उत्तर

2

यह हार्डवेयर त्वरित है, लेकिन अमीर उल्लेख के रूप में, यह सीएसएस संक्रमण के साथ ऐसा करना आसान और अधिक कुशल है। बात यह है कि jQuery के साथ एनिमेटिंग 3 डी ट्रांसफॉर्म सरल नहीं है, यदि आप करते हैं:

$('div').animate({ 
    '-vendor-transform' : "translate3d(100px,0,0)"; 
}, 500) 

यह काम नहीं करता है। यहां तक ​​कि अगर आप ऐसा करेंगे:

$('div').css("-webkit-transform", "translate3d(0,0,0)"); 
alert($('div').css("-webkit-transform")) 

आप वापस translate3d(0,0,0) नहीं मिलता है, तो आप matrix(1, 0, 0, 1, 100, 0)

मिलता तो तुम मैट्रिक्स को शामिल बस स्क्रीन पर चलती कराने के लिए कस्टम एनिमेशन कोड का एक बहुत कुछ लिखना चाहिए।

यहां एक कस्टम एनिमेटेड 3 डी ट्रांसफॉर्म उदाहरण है: http://www.eleqtriq.com/wp-content/static/demos/2010/rotation/, यह देखने के लिए स्रोत कोड पर एक नज़र डालें कि यह जावास्क्रिप्ट का स्तर है जिसके साथ आप सहज हैं।

+0

वाह !! तो '-webkit-transform: rotate3D (...)' के मान जावास्क्रिप्ट के साथ एनिमेटेड हैं, लेकिन पूरी चीज GPU के साथ तेज हो गई है? 'शीर्ष ', या' बाएं 'जैसी गुणों के बारे में क्या? मैं इस धारणा के तहत हूं कि यदि आप जावास्क्रिप्ट के साथ उन गुणों को एनिमेट करते हैं तो वे GPU त्वरण नहीं करेंगे जब तक आप GPU त्वरण को ट्रिगर करने के लिए 'ट्रांसफॉर्म: translate3d (0,0,0) 'लागू नहीं करते हैं। क्या वह सही है? – trusktr

+0

नहीं, भले ही आप 'translate3d' लागू करें और फिर jquery के साथ' बाएं 'को एनिमेट करें, जीपीयू नहीं लाएगा। यहां कुछ टेस्ट केस हैं: http://jsfiddle.net/zAgpd/, अंतर अधिक स्पष्ट है सफारी। – Duopixel

+0

ईमानदार होने के लिए, मैं अपने कंप्यूटर पर प्रदर्शन में कोई अंतर भी नहीं देख सकता। वे सब सिर्फ चिकनी के रूप में प्रदर्शन करने लगते हैं। तो बस सत्यापित करने के लिए, '# jqhardware' और '# हार्डवेयर' दोनों हार्डवेयर त्वरित हैं? – trusktr

3

जब तक आप संक्रमण का उपयोग नहीं करते हैं तब तक यह वेबकिट ब्राउज़र के लिए हार्डवेयर त्वरित नहीं होगा। ,

-webkit-transform: translate3d(0,0,0); 
transform: translate3d(0,0,0); 

कारण रूपांतरण माध्यम से जल्दी कर रहे हैं, क्योंकि है: इसके अलावा, केवल 3 डी रूपांतरण त्वरित रहे हैं, ताकि यह सुनिश्चित करने के लिए एक त्वरित तरीका है कि तत्व अगर यह उपलब्ध है 3 डी प्रतिपादन पेड़ का उपयोग करने के लिए जा रहा है जोड़ने के लिए है परिभाषा के अनुसार वे किसी भी अन्य तत्वों को प्रभावित नहीं करते हैं - इसका मतलब है कि ब्राउजर को पूरी खिड़की को फिर से भरने की ज़रूरत नहीं है, केवल उस हिस्से को बदल दिया जा रहा है।

एनिमेटिंग का पुराना तरीका वास्तव में अप्रचलित माना जाना चाहिए, क्योंकि यह संक्रमण से बहुत कम कुशल है, और आम तौर पर आईओएस पर कम फ्रेमरेट होता है।

+0

तो, उदाहरण के लिए, एक skew ट्रांसफॉर्म को 'transform3d: translate (0,0,0); 'चाल का उपयोग किए बिना तेज नहीं किया जाएगा? – trusktr

+0

skew पर निश्चित नहीं है - मैंने कभी भी उत्पादन उपयोग में अनुवाद का उपयोग किया है। मुझे ऐसा लगता है, लेकिन गलत हो सकता है। –

+2

रिच का मतलब था 'ट्रांसफॉर्म: translate3d (0,0,0) '। – Duopixel

संबंधित मुद्दे