2009-11-16 12 views
12

$('img').height() restituisce 0 in chrome, ma restituisce l'altezza effettiva in IE e firefox.altezza immagine utilizzando jquery nel problema chrome

Qual è il metodo effettivo per ottenere l'altezza dell'immagine in chrome?

+0

Hai specificato 'height' nel tag' img' o nel CSS? –

+0

è visibile, ovvero è stato visualizzato? –

+6

Fai cose non su '$ (document) .ready' ma su' $ (window) .load'. Ha funzionato per me - http://www.fortwaynewebdevelopment.com/jquery-width-or-height-ways-returns-0-fix/ – jibiel

risposta

1

La mia ipotesi è che questa funzione venga chiamata prima che l'immagine abbia finito di caricare. Puoi provare a mettere un ritardo sulla funzione per vedere se questo è effettivamente il caso? In questo caso, puoi imbrogliare usando un timer prima di eseguire la funzione.

È leggermente più complicato rilevare quando un'immagine è stata caricata. Have a look at this script for some ideas - forse potrebbe funzionare per te.

+0

Oppure eseguire lo script in un evento onload del corpo, anziché l'evento pronto per il documento. Non è così preciso, poiché l'intero documento deve essere caricato, ma puoi essere sicuro che l'immagine sia stata caricata (supponendo che sia un'immagine nel codice, non qualche cosa caricata AJAX). –

+2

@Frank, l'onload del corpo viene chiamato al termine della creazione del DOM, non è garantito che le risorse all'interno del DOM abbiano completato il caricamento (immagini incluse). – JasonWyatt

9

Come ha detto Josh, se l'immagine non è ancora stata caricata completamente, jQuery non saprà ancora quali sono le dimensioni. Provare qualcosa di simile per garantire la si sta solo tentando di accedere sue dimensioni dopo che l'immagine è stata completamente caricata:

var img = new Image(); 

$(img).load(function() { 
    //-- you can determine the height before adding to the DOM 
    alert("height: " + img.height); 
    //-- or you can add it first... 
    $('body').append(img); 
    //-- and then check 
    alert($('body img').height()); 
}).error(function() { 
    //-- this will fire if the URL is invalid, or some other loading error occurs 
    alert("DANGER!... DANGER!..."); 
}); 

$(img).attr('src', "http://sstatic.net/so/img/logo.png"); 
1

una correzione leggermente brutto ma efficace che ho usato era usare un linguaggio backend, nel mio caso php, per ottenere l'altezza e impostarla sull'immagine prima di inviarla al browser.

è brutto, ma semplice e veloce

1

Precaricamento l'immagine e la creazione di una funzione di callback potrebbe essere quello che stai cercando:

// simple image preloader 
function getHeight(el,fn) { 
    var img = new Image(); 
    img.onload = function() { fn(img.height); }; 
    img.src = el.attr("src"); 
} 

$("img").each(function(){ 
    getHeight($(this),function(h){ 
     // what you need to do with the height value here 
     alert(h); 
    }); 
}); 
-1

Proprio avuto lo stesso problema: impostare la larghezza e altezza in anticipo tramite CSS o HTML.

0

Avendo appena fatto alcuni esperimenti con questo ho trovato che

$(this).height(); 

Restituisce 0 - tuttavia se si utilizzano solo pianura vecchio JS

this.height; 

ho l'altezza dell'immagine corretta.