2014-04-30 6 views
9

Devo essere in grado di usare jQuery per ottenere l'altezza di un'immagine #imageHero prima che sia completamente caricata nella pagina. Devo quindi impostare l'altezza di un div #imageDiv all'altezza dello #imageHero che viene caricato.Ottieni l'altezza dell'immagine prima del suo caricamento completo

Ho bisogno che questo accada al più presto quando si crea la pagina ... attualmente il codice che sto usando per impostare il div #imageDiv all'altezza dell'immagine #imageDiv sta accadendo lentamente ed il caricamento della pagina sembra strano ...

Qualche suggerimento?

+0

possibile duplicato del [Get dimensioni delle immagini con Javascript prima immagine è a pieno carico] (http://stackoverflow.com/questions/6575159/get-image-dimensions-with-javascript-before-image-has- full-loaded) –

+0

Grazie A Wolff - L'ho visto, ma nessuna soluzione è stata data in termini di codice - solo quel jFiddle ... speravo in un po 'più di supporto ... – dubbs

+0

Mi dispiace, non lo so ogni altro modo. Se ce ne sono, vorrei saperlo anche io –

risposta

4

Come menzionato nei commenti, questo ha già risposto here, sebbene in puro JavaScript non JQuery. Ho adattato la risposta a:

  • utilizzare jQuery
  • Lavora con un'immagine statica
  • Creato una semplice funzione che si può chiamare

Ecco la funzione ...

function getImageSize(img, callback){ 
    img = $(img); 

    var wait = setInterval(function(){   
     var w = img.width(), 
      h = img.height(); 

     if(w && h){ 
      done(w, h); 
     } 
    }, 0); 

    var onLoad; 
    img.on('load', onLoad = function(){ 
     done(img.width(), img.height()); 
    }); 


    var isDone = false; 
    function done(){ 
     if(isDone){ 
      return; 
     } 
     isDone = true; 

     clearInterval(wait); 
     img.off('load', onLoad); 

     callback.apply(this, arguments); 
    } 
} 

È possibile chiamare la funzione con un elemento immagine e una richiamata che accetta argomenti larghezza e altezza ...

getImageSize($('#imageHero'), function(width, height){ 
    $('#imageDiv').height(height); 
}); 

Fiddle - Per vedere l'effetto completo assicurarsi che l'immagine non è nella vostra cache (aggiungere un caso alla fonte immagine).

+0

Grazie - vedrà se funziona in questo modo - come farò funzionare la funzione sull'immagine y #imageHero? – dubbs

+0

@dubbs Ho aggiornato lo snippet nella parte inferiore della mia risposta, mostra il codice per la tua immagine. – Drahcir

+0

OK, grazie. Ho ancora il problema che #imageDiv non viene ridimensionato istantaneamente quando la pagina viene caricata ... ciò potrebbe essere dovuto alla posizione delle chiamate jQuery sulla pagina stessa? – dubbs

1

Un miglioramento sulla risposta @Drahcir's, questa versione restituisce l'altezza effettiva e presenta altri miglioramenti. Per testare la modifica di abc123 nell'origine immagine su qualsiasi stringa casuale per impedire la memorizzazione nella cache.

C'è un JSFiddle Demo pure.

<div id="info"></div> 
<img id="image" src="https://upload.wikimedia.org/wikipedia/commons/d/da/Island_Archway,_Great_Ocean_Rd,_Victoria,_Australia_-_Nov_08.jpg?abc123"> 

<script> 
getImageSize($('#image'), function(width, height) { 
    $('#info').text(width + ',' + height); 
}); 

function getImageSize(img, callback) { 
    var $img = $(img); 

    var wait = setInterval(function() { 
     var w = $img[0].naturalWidth, 
      h = $img[0].naturalHeight; 
     if (w && h) { 
      clearInterval(wait); 
      callback.apply(this, [w, h]); 
     } 
    }, 30); 
} 
</script> 
Problemi correlati