2009-07-01 4 views
6

मैं <canvas> पर एक ग्राफ चित्रित कर रहा हूं जिसके लिए महंगी गणना की आवश्यकता है। मैं एक एनीमेशन बनाना चाहता हूं (माउस को कैनवास में ले जाने पर) जहां ग्राफ अपरिवर्तनीय है, लेकिन कुछ अन्य ऑब्जेक्ट्स इस पर खींचे जाते हैं।बाद में एनीमेशन फ्रेम में फिर से खींचे जाने के लिए <canvas> सामग्री सहेजें?

क्योंकि कैनवास को बहुत से फिर से खींचा जाना होगा, मैं प्रत्येक फ्रेम के लिए ग्राफ प्रस्तुत करने के लिए गणना नहीं करना चाहता हूं। मैं ग्राफ को एक बार कैसे खींच सकता हूं, इसे सहेज सकता हूं, और फिर एनीमेशन के बाद के फ्रेम को फिर से चलाने के लिए सहेजे गए प्रतिपादन का उपयोग कर सकता हूं, ताकि महंगी गणना केवल & पर होनी पड़े, मुझे बस इतना आसान एनीमेशन परत है?

मैं एक दूसरे कैनवास & तो ctx.drawImage() का उपयोग कर मुख्य कैनवास पर यह रेंडर करने के ग्राफ ड्राइंग कोशिश की, लेकिन कैनवास पर ड्राइंग, जब तक यह डोम & नहीं display:none; में है काम करने के लिए प्रतीत नहीं होता। क्या मुझे कुछ हैकी करना है जैसे अस्थायी कैनवास को देखने के लिए, या क्या ऐसा करने का एक क्लीनर तरीका है?

उत्तर

6

आपको कम से कम 2 कैनवस का उपयोग करने की आवश्यकता है: एक जटिल ड्राइंग के साथ, और दूसरा, एनिमेटेड आकृतियों के साथ पहले (उसी आकार के साथ, पूर्ण में स्थित) के शीर्ष पर। यह विधि आईई पर काम करेगी, और इमेजडेटा ExCanvas के साथ काम नहीं करेगी।

कैनवास पर जटिल चित्रों को करने वाली प्रत्येक लाइब्रेरी इस विधि (फ़्लोट और अन्य) का उपयोग करती है।

<div style="width: 600px; height: 300px; position: relative;" id="container"> 
    <canvas class="canvas" style="position: absolute; left: 0px; top: 0px;" width="600" height="300"/> 
    <canvas class="overlay" style="position: absolute; left: 0px; top: 0px;" width="600" height="300"/> 
</div> 
+0

मुझे यह नहीं पता था - और मैंने पढ़े गए सभी कैनवास दस्तावेज़ों में इसके बारे में कुछ भी नहीं देखा। अच्छा नोट –

1

मुझे flot.js चार्टिंग लाइब्रेरी में कुछ बदलाव करना पड़ा। मुझे 99% यकीन है कि यह ओवरलैपिंग कैनवस का उपयोग करता है। एक चार्ट परत और एक ओवरले परत है। आप स्रोत कोड देख सकते हैं।

3

कैसे अपने ग्राफ प्रतिपादन के आराम के लिए

var imdata = ctx.getImageData(0,0,width,height); 

और फिर

ctx.putImageData(imdata, 0,0); 

अपने कैनवास पर पहली बार ड्राइंग और उसके बाद के बारे में।

+0

क्या यह आईई में काम करेगा? क्या excanvas कैनवास की इमेजेटाटा कार्यक्षमता का समर्थन करता है? – Nosredna

+0

नहीं और नहीं। लेकिन यह के बारे में एक प्रश्न था जो आईई का समर्थन नहीं करता है। – Clint

+0

अच्छा बिंदु। यह सच है यदि आपका लक्ष्य एडोब एयर, मोबाइल सफारी, टाइटेनियम या कोई अन्य साझे प्लेटफार्म है जहां आप अपनी आईई चिंताओं को छोड़ सकते हैं। – Nosredna

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