2013-02-20 11 views
14

मैं उपयोग कर सकते हैं:छवि लोड घटनाओं के लिए बुलबुला उपलब्ध है?

window.addEventListner(); 

किसी तरह से।

मेरी सभी छवियों में display = 'none' है।

एक बार छवि लोड हो जाए,

मैं display = 'inline'

स्थापित करने के लिए इस तरह से मैं सामान्य सकता है, जबकि चित्र डाउनलोड किया जा रहा है क्या प्रदर्शित किया जाता है चाहता हूँ।

इस मामले में, मैं अपनी छवियों को प्री-लोड नहीं कर सकता।

उत्तर

10

load/onload ईवेंट बबल (reference, reference) नहीं है, तो क्या आप के लिए पूछ रहे हैं संभव नहीं है। आपको प्रत्येक इमेज नोड में इवेंट हैंडलर संलग्न करना होगा।

+0

यहां तक ​​कि "असामान्य रूप से" भी नहीं। एक और रेफरी: http://www.w3.org/TR/DOM-Level-3-Events/#event-type-load – bfavaretto

+0

मैंने सोचा होगा कि यह घटना बुलबुले के लिए क्या थी। लेकिन मुझे नहीं लगता, मैंने अपना प्रश्न अपडेट कर लिया है। –

+0

कई अन्य घटनाएं बबल, जैसे 'क्लिक', और यह सुनिश्चित है कि उपयोगी है। लेकिन तथ्य यह है कि 'लोड' बुलबुला नहीं है इसका मतलब यह नहीं है कि आप अपनी छवियों को प्रीलोड नहीं कर सकते हैं। सभी छवियों के लिए 'लोड' को संभालने के लिए एक एकल फ़ंक्शन क्यों न बनाएं? – bfavaretto

0
$('img').on('load', function() { 
    $(this).show() 
}) 

पुस्तकालयों के बिना:

window.onload = function() { 
    var imgs = document.querySelectorAll('img') 
    imgs.onload = function() { 
     this.style.display = 'inline'; 
    } 
} 
+0

@pure_code आप के लिए मेरा उत्तर अद्यतन? :-) – Neal

+0

'window.onload' नहीं है * के बाद * सभी छवियों को लोड किया गया है? –

+0

@ फ़ेलिक्सक्लिंग आवश्यक नहीं है। – Neal

1

आप Image.onload ईवेंट हैंडलर का उपयोग कर सकते लेकिन कोई उत्साह से भरा हुआ शामिल है। यदि छवि संयोग से पहले से ही भरी हुई है

var i = new Image; 
i.onload = function() { 
    this.style.display = 'block'; 
} 
2
Array.prototype.forEach.call(document.querySelectorAll('img'), function (elem) { 
    elem.addEventListener('load', function() { 
     this.style.display = 'inline'; 
    }); 
    if (elem.complete) { 
     elem.style.display = 'inline'; 
    } 
}); 

"लोड" घटना ट्रिगर नहीं करेगा; इस प्रकार, हम जांचते हैं कि complete पहले से सेट है या नहीं।

39

उपयोग कुछ डोम window (body या ब्याज की छवि तत्वों के दूसरे माता पिता) के अलावा अन्य नोड पर घटना श्रोता पर कब्जा:

document.body.addEventListener(
    'load', 
    function(event){ 
     var tgt = event.target; 
     if(tgt.tagName == 'IMG'){ 
      tgt.style.display = 'inline'; 
     } 
    }, 
    true // <-- useCapture 
) 
इस के साथ

आप (फिर) की जरूरत नहीं है देते हैं इवेंट हैंडलर document.images के माध्यम से पुनरावृत्त करते हैं।

और यह गतिशील रूप से सम्मिलित छवियों के लिए भी काम करेगा।

Same is true for image's error loading events. MDN: addEventListener

+1

मैंने छवि लोड घटनाओं के ईवेंट प्रतिनिधिमंडल के लिए कभी भी ऐसा करने का विचार नहीं किया। काफी शानदार! और कारण यह खिड़की नहीं हो सकता है: "विरासत कारणों से, दस्तावेज़ के अंदर संसाधनों के लिए लोड घटनाओं (उदाहरण के लिए, छवियों) में HTML कार्यान्वयन में प्रचार पथ में विंडो शामिल नहीं है" – Adria

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