2013-05-13 29 views
6

मेरी समस्या यह है कि जब पृष्ठ लोड होता है तो कभी-कभी यह सभी छवियों को प्रदर्शित करता है, कभी-कभी केवल 2 छवियां और कभी-कभी सभी। मुझे नहीं पता कि यह क्यों हो रहा है।वेबसाइट पर लोड नहीं हो रहा है

कोई विचार?

$('#banners .box img').each(function(index){ 
     var randval = (index+1)*100; 
     var _this = $(this) 
     setTimeout(function(){ 
      _this.attr('id' , 'banner' + index); 
      to_canvas('banner' + index, 300, 223); 
     }, randval) 
    }); 

to_canvas समारोह:

function to_canvas(im,w,h){ 
     var canvas; 
     var imageBottom; 
     var im_w = w; 
     var im_h = h; 
     var imgData; 
     var pix; 
     var pixcount = 0; 
     var paintrow = 0; 
     var multiplyColor = [70, 116, 145]; 
     var x_offset = Math.floor(($('#'+im).attr('width') - im_w)/2); 
     var y_offset = Math.floor(($('#'+im).attr('height') - im_h)/2); 
     imageBottom = document.getElementById(im); 
     canvas = document.createElement('canvas'); 
     canvas.width = im_w; 
     canvas.height = im_h; 
     imageBottom.parentNode.insertBefore(canvas, imageBottom); 
     ctx = canvas.getContext('2d'); 
     ctx.drawImage(imageBottom, -x_offset , -y_offset); 
     imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); 
     pix = imgData.data; 
     for (var i = 0 ; i < pix.length; i += 4) { 
      if(pixcount > im_w - (im_h - paintrow)){ 
       pix[i ] = multiply(multiplyColor[0], pix[i ]); 
       pix[i+1] = multiply(multiplyColor[1], pix[i+1]); 
       pix[i+2] = multiply(multiplyColor[2], pix[i+2]); 
      } 
      if(pixcount < im_w-1){ 
       pixcount++; 
      }else{ 
       paintrow++; 
       pixcount = 0; 
      } 
     } 
     ctx.putImageData(imgData, 0, 0); 
     $('#'+im).remove(); 
    } 
    function multiply(topValue, bottomValue){ 
     return topValue * bottomValue/255; 
    } 

मैं एक त्रिकोण (फ़ोटोशॉप) की तरह गुणा प्रभाव के साथ जोड़ने के लिए कैनवास फ़ंक्शन का उपयोग कर रहा हूँ।

+2

दुर्भाग्य से मैं तुम्हारे लिए एक जवाब नहीं है, लेकिन आप यह देखने के लिए छवियों कहा जा रहा है या नहीं आपके वेबसाइट के आवागमन की निगरानी की कोशिश की? फायरबग में 'नेट' टैब आपको पेज लोड के रूप में सभी ट्रैफिक दिखाएगा - आप यह देखने में सक्षम होंगे कि छवियों को बुलाया जा रहा है या लोड हो रहा है (या असफल हो रहा है), या जिन्हें सफलतापूर्वक लोड किया जा रहा है, जिसमें अगर आप इसे प्रदर्शित करने के तरीके में कहीं भी एक बग है। – johnkavanagh

+0

मैंने अभी ध्यान दिया है कि छवियों को प्रदर्शित नहीं किया जाता है, जब मैं कैशिंग के बिना पेज रीफ्रेश करता हूं (ctrl + f5)। लेकिन यह सफलतापूर्वक डाउनलोड हो जाते हैं (फायरबग में चेक किया गया)। जब आप पेज को रीफ्रेश करते हैं और ब्राउज़र को केवल कैश करने की अनुमति देते हैं (केवल F5), छवियां दिखाई देती हैं। हो सकता है कि यह आपको –

+1

की मदद करेगा, आपको यकीन है कि आपको छवियों को लोड होने तक प्रतीक्षा नहीं करनी चाहिए, यानी किसी भी चीज़ के लिए उनका उपयोग शुरू करने से पहले, किसी भी तरह से छवियों के अधिभार ईवेंट का उपयोग करें? – adeneo

उत्तर

1

सुनिश्चित करें कि छवियों लोड किए गए हैं:

$('#banners .box img').each(function(index, elem){ 
    var randval = (index+1)*100, 
      self = this, 
      img = new Image(); // create image object 

    img.onload = function() {  // wait until it's loaded 
     setTimeout(function(){ 
      self.id = 'banner' + index; 
      to_canvas('banner' + index, 300, 223); 
     }, randval) 
    } 
    img.src = elem.src;   // set source to same as elem 
}); 
+0

यह भी काम करता है लेकिन मुझे लगता है कि @derek_duncan इसके अधिक सरल समाधान का उत्तर देता है। इस तरह मैं इसका क्या फायदा उठाऊंगा? –

+0

आपको window.onload के लिए इंतजार नहीं करना पड़ेगा, लेकिन इसके बजाय बस सुनिश्चित करें कि प्रत्येक छवि पूरी तरह से लोड हो गई है। – adeneo

+0

ठीक है, यह एक बेहतर तरीका है जो मुझे लगता है। धन्यवाद –

0

यह सुनिश्चित करने के लिए कि यह आपकी स्क्रिप्ट निष्पादित करने से पहले छवियों को लोड किया गया है, इस कोड में सभी को लपेटें। जब आप प्रारंभ में अपना पृष्ठ लोड करते हैं, तो यह छवियों को कैश करता है (उन्हें अस्थायी स्मृति में संग्रहीत करता है), लेकिन आपके सभी तत्वों को प्रस्तुत करने से पहले नहीं। जब आप पुनः लोड करते हैं, तो यह कैश से छवियों को पढ़ता है-जो कि सर्वर से छवियों को फिर से रीसेट करने से बहुत तेज़ है-और इसलिए छवियां एक ही समय में लोड होती हैं और बाकी सब कुछ करती है। यह दृश्य छवियों में परिणाम।

जैसे मैंने कहा, अपना पृष्ठ काम करने के लिए, सुनिश्चित करें कि सब कुछ लोड हो गया है, फिर अपनी स्क्रिप्ट चलाएं।

$(window).load(function(){ 
    ...your scripts(you can exclude functions definitions from this scope) 
} 
+0

यह काम करता है, आपको बहुत धन्यवाद –

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