2010-06-13 25 views
10

मैं html5 की कैनवास सुविधा का उपयोग कर रहा हूं। मेरे पास कैनवास पर आकर्षित करने के लिए कुछ छवियां हैं और मुझे यह जांचने की ज़रूरत है कि इससे पहले कि वे उनका उपयोग कर सकें, वे सभी लोड हो गए हैं।लोड की गई कई छवियों की जांच

मैंने उन्हें एक सरणी के अंदर घोषित कर दिया है, मुझे जांच करने का एक तरीका चाहिए कि वे सभी एक ही समय में लोड हो गए हैं लेकिन मुझे यकीन नहीं है कि यह कैसे करें।

यहाँ मेरी कोड है:

var color = new Array(); 
color[0] = new Image(); 
color[0].src = "green.png"; 
color[1] = new Image(); 
color[1].src = "blue.png"; 
वर्तमान में यदि छवियों लोड किया है, मैं इतना की तरह एक के बाद यह एक करने के लिए होता है की जाँच करने के

:

color[0].onload = function(){ 
//code here 
} 
color[1].onload = function(){ 
//code here 
} 

अगर मैं एक बहुत अधिक था छवियों, जो बाद में मैं विकास में होगा, यह उन सभी की जांच करने का एक वास्तव में अक्षम तरीका होगा।

मैं उन्हें एक ही समय में कैसे देखूं?

उत्तर

2

यह करने के लिए एक hackish तरीका एक और फ़ाइल में जे एस आदेश जोड़ सकते हैं और पाद लेख में यह जगह है। इस तरह यह आखिरी लोड करता है।

हालांकि, jQuery (दस्तावेज़) का उपयोग कर .ready भी देशी विंडो से बेहतर काम करता है।

आप क्रोम का उपयोग कर रहे हैं आप नहीं हैं?

+0

हां, मैं क्रोम का उपयोग कर रहा हूं। – Stanni

+0

याहू, window.onload जल्दी चल रहा है क्रोम बग है। आप विशेष रूप से क्रोम के लिए देरी करने के लिए सेटटाइमआउट के साथ ब्राउज़र स्नीफिंग का उपयोग कर सकते हैं। –

+0

ठीक है, मैं देखता हूं, धन्यवाद। – Stanni

3

जो जब सभी छवियों/फ्रेम और बाह्य संसाधनों लोड किए गए हैं आग का प्रयोग करें window.onload: क्योंकि समय से

window.onload = function(){ 
    // your code here........ 
}; 

तो, आप सुरक्षित रूप से window.onload में अपनी छवि से संबंधित कोड डाल सकते हैं सभी छवियों पहले ही लोड हो चुका है

More information here.

+0

के लिए काम किया यह इसे हल करने की नहीं लगती। मैंने विंडो कॉलर को कार्यान्वित किया है। फ़ंक्शन कॉलर के आस-पास ईवेंट हैंडलर जो पूरी स्क्रिप्ट को शुरू करता है लेकिन यह अभी भी बहुत जल्दी चलता है। – Stanni

+2

यह तब भी काम नहीं करता है जब विंडो छवि अधिभार ईवेंट के बाद आपकी छवियों के DOM नोड बनाए जाते हैं। –

10

क्या आप बस एक लूप का उपयोग नहीं कर सकते हैं और एक ही फ़ंक्शन को सभी ऑनलोड पर असाइन नहीं कर सकते?

var myImages = ["green.png", "blue.png"]; 

(function() { 
    var imageCount = myImages.length; 
    var loadedCount = 0, errorCount = 0; 

    var checkAllLoaded = function() { 
    if (loadedCount + errorCount == imageCount) { 
     // do what you need to do. 
    } 
    }; 

    var onload = function() { 
    loadedCount++; 
    checkAllLoaded(); 
    }, onerror = function() { 
    errorCount++; 
    checkAllLoaded(); 
    }; 

    for (var i = 0; i < imageCount; i++) { 
    var img = new Image(); 
    img.onload = onload; 
    img.onerror = onerror; 
    img.src = myImages[i]; 
    } 
})(); 
23

आप जब सभी छवियों को लोड किया जाता है एक समारोह कॉल करने के लिए चाहते हैं, तो आप यह कर सकते, यह मेरे

var imageCount = images.length; 
var imagesLoaded = 0; 

for(var i=0; i<imageCount; i++){ 
    images[i].onload = function(){ 
     imagesLoaded++; 
     if(imagesLoaded == imageCount){ 
      allLoaded(); 
     } 
    } 
} 

function allLoaded(){ 
    drawImages(); 
} 
+0

धन्यवाद। मेरे लिए काम किया –

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