2009-07-19 4 views
9

के साथ सिंक्रनाइज़ छवियों को लोड करना मुझे एक छवि को तुल्यकालिक रूप से लोड करने की आवश्यकता है, मुझे छवि लोड होने तक जावास्क्रिप्ट के निष्पादन को रोकने की आवश्यकता है। चूंकि image.onload एसिंक्रोनस है, मुख्य फ़ंक्शन छवि लोड होने से पहले वापस आ जाएगा।जावास्क्रिप्ट

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

var img = new Image(); 
img.onload = function() { 
    //image drawing code here 
} 
img.src = "blahblahblah"; 
//function returns here, and other drawing code happens before image is drawn 

इस तुल्यकालिक ऐसा करने के लिए, या जब तक छवि पूरी तरह से समारोह से लौटने से पहले भरी हुई है प्रतीक्षा करने के लिए एक रास्ता है:

यहाँ मैं क्या कर रहा हूँ है?

उत्तर

2

इस तुल्यकालिक ऐसा करने के लिए, या जब तक छवि पूरी तरह से समारोह से लौटने से पहले भरी हुई है प्रतीक्षा करने के लिए कोई तरीका है?

सं। AFAIK, जावास्क्रिप्ट में सिंक्रनाइज़ किए जाने वाली एकमात्र चीज एक सिंक्रोनस एक्सएचआर कॉल है।

किसी भी मामले में, आपको वास्तव में क्या करना चाहिए, कॉलबैक का एक विरासत स्थापित करना जो आपकी निर्भरताओं को लागू करता है।

+0

मेरे पास कैनवास पर बहुत अधिक ड्राइंग करने वाला बहुत बड़ा लूप है, और छवि लोड होने के दौरान लूप रोकना मुश्किल है, जो मुझे चाहिए। अगर मैंने छवि का इस्तेमाल किया। कॉलबैकलोड करें, लूप में कुछ और के बाद छवि खींची जाएगी। इससे छवियों को सामने आने वाली चीजों के सामने प्रकट होने का कारण बनता है। – devongovett

+0

फ़ंक्शन में, जो छवि लोडिंग शुरू करता है, आखिरी बात के रूप में, एक फ़ंक्शन शुरू करने के लिए setInterval का उपयोग करें जो किसी ऑब्जेक्ट पर बंद हो जाता है जो आपकी छवि द्वारा बंद भी होता है। कॉलबैकलोड करें। "अंतराल" फ़ंक्शन को तब तक कुछ नहीं करना चाहिए जब तक एक विशिष्ट ध्वज सेट नहीं किया जाता है। वह झंडा आपकी छवि द्वारा सेट किया जाना चाहिए। कॉलबैकलोड करें। जब यह ध्वज सेट पाता है, तो "अंतराल" फ़ंक्शन को कोड के अगले भाग को कॉल करना चाहिए; कोड जो "पृष्ठभूमि" छवि के शीर्ष पर खींचता है। –

+0

आप * इसे रोक नहीं सकते हैं, आपको इस विचार को अपने दिमाग से छुटकारा पाना चाहिए। –

0

मुझे नहीं लगता कि आप इसे असंकालिक रूप से कर सकते हैं, और सोचें कि छवि फ़ाइल का पथ गलत है तो यह बहुत जोखिम भरा होगा। आपको यह समझना चाहिए कि ऑनलोड एक कॉलबैक है, जिसे छवि पूरी तरह से लोड होने पर बुलाया जाएगा।

तो आपको कॉलबैक फ़ंक्शन में सभी ड्राइंग कोड निष्पादित करना होगा।

2

इसे पुन: सक्रिय करके हल नहीं किया जा सकता है?

कॉलबैक द्वारा लगाए गए फ़ंक्शन में छवि लोड के बाद जो भी कोड आपको निष्पादित करने की आवश्यकता है उसे लपेटें (या उस कॉल को कॉलबैक बनाएं)।

मुझे लगता है कि आप कहते हैं कि यदि मुख्य फ़ंक्शन लौटाता है, तो अन्य कोड निष्पादित होगा। क्या आप इसे भी लपेट सकते हैं? क्या आप इसे निष्पादन में देरी कर सकते हैं या इसे इस ऑनलोड ईवेंट या किसी अन्य घटना पर निर्भर कर सकते हैं?

आप छवि अधिभार में अन्य जावास्क्रिप्ट कोड के स्रोत को भी गतिशील रूप से लोड कर सकते हैं।

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