2013-05-13 10 views
6

Il problema che ho è che quando la pagina viene caricata a volte visualizza tutte le immagini, a volte solo 2 immagini e, a volte tutte. Non so perché questo sta accadendo.Le immagini non si caricano sul sito web

Qualche idea?

$('#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) 
    }); 

funzione 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; 
    } 

sto usando la funzione di tela per aggiungere un triangolo con effetto moltiplicare (come Photoshop).

+2

Purtroppo non ho una risposta per voi, ma avete provato monitorare il traffico sito web per vedere se le immagini sono chiamati o no? In Firebug la scheda 'NET' ti mostrerà tutto il traffico quando una pagina viene caricata - sarai in grado di vedere se le immagini vengono chiamate, o stanno caricando (o fallendo), o vengono chiamate e caricate con successo, in cui caso è un bug da qualche parte nel modo in cui lo stai visualizzando. – johnkavanagh

+0

Ho appena notato che le immagini non vengono visualizzate quando aggiorno la pagina senza cache (ctrl + f5). Ma che vengono scaricati correttamente (controllato in firebug). Quando si aggiorna la pagina e si consente al browser di memorizzare solo la cache (solo F5), le immagini sono visibili. Forse ti aiuterà –

+1

Sei sicuro di non dover aspettare fino a quando le immagini non vengono caricate, cioè utilizzare in qualche modo l'evento onload delle immagini, prima di iniziare a usarle per qualcosa? – adeneo

risposta

1

assicurarsi che le immagini vengono caricate:

$('#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

Anche questo funziona, ma penso che @derek_duncan risponda alla sua soluzione molto più semplice. Quale vantaggio avrei usato in questo modo? –

+0

Non dovresti aspettare window.onload, ma invece assicurati che ogni immagine sia stata caricata completamente. – adeneo

+0

Ok, questo è un modo migliore, penso. Grazie –

0

Avvolgere tutto in questo codice per assicurarsi che le immagini vengano caricate prima di eseguire lo script. Quando si carica la pagina inizialmente, memorizza nella cache le immagini (le memorizza nella memoria temporanea), ma non prima che tutti i tuoi elementi siano visualizzati. Quando ricarichi, legge le immagini dalla cache, che è molto più veloce del refleing delle immagini dal server, e quindi le immagini si caricano all'incirca nello stesso tempo di qualsiasi altra cosa. Ciò si traduce in immagini visibili.

Come ho già detto, per far funzionare la tua pagina, assicurati che tutto sia caricato, quindi esegui il tuo script.

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

Questo funziona, grazie mille –

Problemi correlati