2013-02-21 32 views
5

मैं इस कोड का उपयोग किया गया था का पता लगाने:छवि इनपुट लोड हो रहा है

<input type="image" ... onLoad="this.style.opacity = 1" /> 

यह IE में ठीक काम करता है (कम से कम, संस्करणों का समर्थन करने वाले opacity: पी) लेकिन क्रोम में onLoad ईवेंट सक्रिय नहीं था, जब छवि लोड ।

ध्यान दें कि इनपुट के src विशेषता को बदल सकते हैं, और जब यह करता है कुछ जावास्क्रिप्ट opacity 0 करने के लिए सेट के पहले, और उपयुक्त transition गुण यह देखने के लिए की तरह छवि फ़ेड आउट और नया एक में fades हैं। इसके अलावा, उपयोग <input type="image"> की आवश्यकता है क्योंकि सर्वर को निर्देशांक की आवश्यकता है।

मैं एक बिल्कुल-तैनात <img>onLoad और opacity, <input> है कि अब एक पारदर्शी GIF पिक्सेल का उपयोग करता है के पीछे रखा लेने का उपयोग कर जेरी-धांधली पास है। हालांकि यह काम करता है, यह बदसूरत है।

क्या क्रोम में <input> में उपयोग की गई छवि की सफल लोडिंग का पता लगाने का कोई तरीका है, या यह background-image, ज्ञानी नहीं है?

संपादित करें: मामले में यह मदद करता है, यहाँ एक Fiddle

+0

इसके बजाय इनपुट के पीछे एक 'img' का उपयोग करने का आपके पास अलग' img' का उपयोग करें और आप क्या चाहते हैं, जैसा कि अक्सर पूर्व लोडर में इस्तेमाल करने के लिए अपने लोड हैंडलर इस्तेमाल कर सकते हैं। बहुत अंतर नहीं है, लेकिन आपका मुख्य डोम क्लीनर होगा। –

+0

सही ईवेंट नाम सभी लोअरकेस के साथ 'ऑनलोड' है, लेकिन मुझे नहीं लगता कि एक गारंटी है कि '' टैग उस छवि को छवि बटन के लिए आग लगा देगा। मुझे कोई कल्पना नहीं मिल सकती है जो कहती है कि यह समर्थित है। – jfriend00

+3

@ jfriend00 एचटीएमएल विशेषताएं केस-असंवेदनशील हैं, मैं 'ऑनलोएड' लिख सकता हूं और यह काम करेगा। –

उत्तर

-2

आप अपने इनपुट के एक संदर्भ के साथ addEventListener() विधि का उपयोग कर सकते हैं।

ध्यान दें कि ईवेंट श्रोता को इनपुट में जोड़ने से पहले आपको पृष्ठ को लोड करने की आवश्यकता होगी, ऐसा करने के लिए, विंडो ऑब्जेक्ट के लिए बस एक और ईवेंट श्रोता लागू करें और फिर अपने इनपुट को संदर्भित करने वाले अपने फ़ंक्शन को आग लगें।

+1

नहीं, कोई फर्क नहीं पड़ता। मुझे लगता है कि मुझे घटना श्रोताओं का उपयोग करने का तरीका पता है, धन्यवाद;) –

+0

प्लस, कोई इवेंट श्रोता स्थापित करने का कोई तरीका नहीं है कि टैग के HTML में टैग होने पर कैश किए गए चित्र को लोड करने से पहले गारेनटेस को इंस्टॉल किया गया हो। – jfriend00

+0

वैसे मैं बिल्कुल नहीं जानता कि आप साथी को करने का प्रयास कर रहे हैं, हो सकता है कि ऑनलोड एटआर कुछ बग के लिए क्रोम पर काम न करे, लेकिन मैंने जेएस के साथ कोशिश की और यह काम करता है (हर बार भी स्रोत बदल रहा है), क्षमा करें अगर मैं ' मैं बेकार हूं या मैंने इसे कई बार दोहराया है, (बस मदद करने की कोशिश कर रहा है) – Neo

0

मुझे याद है कि मैं अतीत में इस तरह की समस्या में भाग गया था। आप निम्न कार्य करके यह पता लगा सकते:

window.onload = function(){ 
    var input = document.getElementById('input1'); 
    input.src=''; 
    input.addEventListener('load', loadImage, false); 
    input.src = 'http://theoffguard.net/wp-content/upLoads/2012/04/Nick-Cage.jpg'; 
} 

function loadImage() 
{ 
    console.log("Image is loaded"); 
} 

डेमो: http://jsbin.com/ufovom/9/edit

आशा इस मदद करता है!

+0

यह इनलाइन हैंडलर से अलग कैसे है? –

+0

वास्तव में कोई नहीं है, लेकिन क्रोम 'अधिभार' को कैसे प्रबंधित करता है, इसके कारण आपको इसे ऐसा करने की आवश्यकता है। मैंने आपके मूल उदाहरण में बदलाव किए हैं: http://jsbin.com/ufovom/14/edit। मेरा मानना ​​है कि यह वेबबिट-आधारित ब्राउज़र के साथ एक समस्या है। – Dom

1

यह एक हैक की तरह है, लेकिन आप Javascript Image वस्तु का दृष्टांत कर सकते हैं, और फिर उस पर घटना श्रोता सेट और फिर इनपुट के स्रोत सेट इसके पूर्ण होने पर लोड हो रहा है:

http://jsfiddle.net/t8n4y/

अस्वीकरण:

<input type="image" id="imgInput" /> 

जावास्क्रिप्ट: केवल क्रोम पर

एचटीएमएल परीक्षण किया

var photo = document.getElementById('imgInput'); 
      var img = new Image(); 
      img.addEventListener('load', function() { alert("done loading"); }, false); 
      img.src = 'http://jeremydouglass.com/gamertextually/images/gt_snowflake_tags-2-ach-large.png?ran=' + Math.random(); 
      photo.src = img.src; 
+0

मैं पहले से उपयोग कर रहा हूं की तुलना में एक बड़ा हैक की तरह लगता है ... –

+0

@ अच्छी तरह से कॉल करें, कम से कम यहां आईएमजी पर लोड इवेंट वैध है। – Christophe

+0

क्या आप कह रहे हैं कि एचटीएमएल और जावास्क्रिप्ट का विवाह नहीं हुआ है और इनलाइन ईवेंट हैंडलर को बेस्टर्ड बच्चों के रूप में रखा गया है? –

0
<input id="image" type="image" ... onLoad="this.style.opacity = 1" /> 

    //script -> 

    $("#image").change(function() { 
       if (this.files && this.files[0]) { 
       var FR = new FileReader(); 
       FR.onload = function (e) { 
        //your onload 
       }; 
       FR.readAsDataURL(input.files[0]); 
      } 
}); 
+0

ठीक है, आप 'इनपुट [प्रकार = छवि] 'के साथ' इनपुट [प्रकार = छवि] 'भ्रमित करने लगते हैं। लेकिन यह कहना मुश्किल है क्योंकि आपने बिना किसी स्पष्टीकरण के सादे कोड को पोस्ट किया है ... –

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