DOM

2013-05-14 13 views
5

पर प्रतिक्रिया करने में बहुत लंबा समय लगता है मैं एक DOM ऑब्जेक्ट के स्रोत को बदलकर प्रत्येक 100ms फ़ाइल में "छवि" प्राप्त करने का प्रयास कर रहा हूं। मैं देख सकता हूं कि जीईटी कॉल वास्तव में हर 100ms सही छवि को वापस कर रहा है, लेकिन वास्तविक छवि प्रदर्शन केवल एक बार एक बार अपडेट होता है।DOM

<img id="videoDisplay" style="width:800; height:600"/> 

<script type="text/javascript"> 
    function videoDataPoll(filename) { 
    setTimeout(function() { 
     document.getElementById("videoDisplay").src = filename + "?random="+(new Date()).getTime(); 
     videoDataPoll(filename); 
    }, 100); 
    } 
</script> 

अद्यतन: यहाँ मेरी जावास्क्रिप्ट कोड है कि काम करता है

<canvas id="videoDisplay" style="width:800; height:600"/> 

<script type="text/javascript"> 
    var x=0, y=0; 
    var canvas, context, img; 
    function videoDataPoll() { 
    var filename = getFilename(); 
    canvas = document.getElementById("videoDisplay"); 
    context = canvas.getContext("2d"); 
    img = new Image(); 
    img.onload = function() { 
     context.drawImage(img, x, y); 
     setTimeout("videoDataPoll()", 100); 
    } 
    img.src = filename + "?random=" + (new Date()).getTime(); 
    } 
<script> 

फिर भी एक ही गति से अद्यतन करता है (जो वास्तव में हर 5 सेकंड, नहीं 1s है: इस प्रकार पहले से लोड होने का उपयोग करने के समारोह बदल दिया मूल रूप से कहा गया है)। इसलिए प्रत्येक 50 अनुरोधों के लिए (5 सेकंड के लिए 10/सेकंड) तत्व केवल एक बार अपडेट हो जाता है।

एक और महत्वपूर्ण नोट: यह दूसरा समाधान मेरे लोकहोस्ट पर पूरी तरह से काम करता है, जहां मैं इस मुद्दे पर चलता हूं, जब मैं एक दूरस्थ वेब होस्ट को दूरस्थ होस्ट से चला रहा हूं।

+1

आपको प्रदर्शित करने से पहले छवियों को प्रीलोड करना होगा। अन्यथा, 1s वह समय है जब छवि लोड हो रही है। आप [इस फ़ंक्शन] का उपयोग कर सकते हैं (http://short-tag.info/2013/04/preload-images-with-plain-javascript/)। – antoox

+19

पहली बार 'videoDataPoll' कहलाता है,' filename' – undefined

+1

हाहा, प्रतिभा टिप्पणी है। –

उत्तर

2

मैं एक निश्चित समय समाप्ति के बजाय छवि के लिए ऑनलोड हैंडलर का उपयोग करने के लिए सुझाव है:

function videoDataPoll(filename) { 
     document.getElementById("videoDisplay").src = filename + "?random="+(new Date()).getTime(); 
    } 

    document.getElementById("videoDisplay").onload = videoDataPoll; 
    videoDataPoll(filename); 

इस मामले आप बल्कि एक परम के रूप में यह पारित करने से समारोह अंदर से फ़ाइल नाम पाने के लिए की आवश्यकता होगी में।

+0

मैंने आपके समाधान की कोशिश की, और मैं मानता हूं कि इसे सिद्धांत में काम करना चाहिए, लेकिन दुर्भाग्यवश बिना टाइमआउट के वीडियोडाटापॉल केवल नियंत्रण से बाहर निकलता है और वेब पेज फ्रीज करता है। – exxodus7

+0

@ exxodus7 आप अभी भी एक टाइमआउट का उपयोग कर सकते हैं, लेकिन आपको टाइमआउट –

+0

अच्छा बिंदु फायर करने से पहले अधिभार की प्रतीक्षा करनी चाहिए। मैंने जवाब में अपने अपडेट में दोनों को एक साथ करने की कोशिश की, लेकिन यह अभी भी वही प्रभाव था (जैसा कि अद्यतन में उल्लेख किया गया है, केवल तभी होता है जब मैं रिमोट होस्ट पर चल रहा हूं)। – exxodus7

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