मैं एक छवि के आयाम प्राप्त करने के लिए, एक डायनामिक रूप से तैयार छवि टैग का उपयोग कर की जरूरत है चौड़ाई 0 है। यह काम करता हैं। लेकिन केवल एटीआर ('चौड़ाई') का उपयोग करना और केवल अगर मैं छवि को डीओएम में नहीं जोड़ता हूं। अन्यथा, लौटाए गए आयाम शून्य हैं। क्यूं कर? :)jQuery: नई छवि डोम को जोड़ा गया हमेशा के बाद लोड
this.img = $('<img/>', {'src': e.url}); // generate image
this.img.appendTo('body'); // add to DOM
this.img.load(function(self){return function(){ // when loaded call function
console.log(self.img.attr('src'));
console.log(self.img.attr('width'));
console.log(self.img.width());
console.log(self.img.css('width'));
}; }(this)); // pass object via closure
तो मैं छवि उत्पन्न, यह डोम में जोड़ने और हैंडलर समारोह को परिभाषित जब छवि लोड किया जाता है कहा जाता है। मैं इसे बंद करने के भीतर "स्वयं" नामक मूल वस्तु का संदर्भ देने के लिए बंद करने का उपयोग कर रहा हूं। मैं यह सुनिश्चित करने के लिए छवि के यूआरएल को डंप कर रहा हूं कि संदर्भ ठीक है। आउटपुट है:
pic.jpg
0
0
0px
अब यहाँ अजीब बात है: ('चौड़ाई') यदि मैं ऊपर (appendTo) दूसरी पंक्ति को हटा दें, तो यह अचानक काम करता है, लेकिन केवल attr के लिए:
pic.jpg
1024
0
0px
यह व्यवहार मुझे कोई समझ नहीं आता है। मैं उपरोक्त सभी छह मामलों में वास्तविक छवि आकार प्राप्त करने की उम्मीद करूंगा। मुझे पता है कि समस्या के आसपास कैसे काम करना है, लेकिन मैं समझना चाहता हूं कि ऐसा क्यों होता है। क्या यह एक बग है? या इसके लिए कुछ तार्किक कारण है?
ऊपर दिए गए परिणामों सफारी के लिए कर रहे हैं। मैंने अभी क्रोम के साथ परीक्षण किया है और मुझे पहले उदाहरण में सभी सही मान मिल गए हैं, लेकिन फिर भी दूसरे उदाहरण में दो शून्य हैं। बहुत अजीब।
क्या आप सुनिश्चित हैं कि आपके पास हमेशा e.url मान्य है ?? – kobe
@travel लड़का आप इस इमेज के बजाय इस वैरिएबल को कुछ अन्य नाम दे सकते हैं, यह .ngImgSource या तो ... /// – kobe
@travelboy और gov: सहमत है, छवि के लिए jQuery ऑब्जेक्ट धारण करने वाली संपत्ति को बदला जाना चाहिए चूंकि आईएमजी एक टैग नाम है, बस अच्छा अभ्यास है। – UpHelix