2013-05-02 5 views
16

Ho questo codice finora:Come ottengo le dimensioni naturali di un'immagine usando javascript o jquery?

var img = document.getElementById('draggable'); 
var width = img.clientWidth; 
var height = img.clientHeight; 

Tuttavia, questo mi fa gli attributi HTML - stili CSS. Voglio ottenere le dimensioni della risorsa immagine reale, del file.

Ho bisogno di questo perché al caricamento di un'immagine, la sua larghezza viene impostata su 0px e non ho idea del motivo o dove sta accadendo. Per prevenirlo voglio ottenere la dimensione attuale e resettarla. È possibile?

Modifica: anche quando provo a ottenere NaturalWidth, ottengo 0 come risultato. Ho aggiunto una foto. La cosa strana è che accade solo quando carico nuovi file e, una volta aggiornato, funziona come dovrebbe.

http://oi39.tinypic.com/3582xq9.jpg

+0

Guardate [questo] (http://stackoverflow.com/a/626505/6190800) soluzione –

risposta

33

Si potrebbe utilizzare naturalWidth e naturalHeight, queste proprietà contengono la larghezza effettiva, non modificato e l'altezza dell'immagine, ma bisogna aspettare fino a quando l'immagine è stata caricata per farli

var img = document.getElementById('draggable'); 

img.onload = function() { 
    var width = img.naturalWidth; 
    var height = img.naturalHeight; 
} 

Questo è solo supportato da IE9 e versioni successive, se devi supportare browser più vecchi puoi creare una nuova immagine, impostarne l'origine sulla stessa immagine e, se non modifichi le dimensioni dell'immagine, restituirà le dimensioni naturali dell'immagine, come quello sarebbe l'impostazione predefinita quando non viene fornita un'altra dimensione

var img  = document.getElementById('draggable'), 
    new_img = new Image(); 

new_img.onload = function() { 
    var width = this.width, 
     heigth = this.height; 
} 

new_img.src = img.src; 

FIDDLE

+2

no jQuery mi rende felice :-) –

+0

Questo lo risolve, grazie. Il wrapping del mio codice all'interno della funzione jQuery.ready() non è sufficiente dato che l'immagine non viene caricata da allora? Ho questo problema solo quando carico un nuovo file sul server. – user1848605

+4

Le immagini non vengono caricate quando viene attivata la funzione jQuery DOM ready, solo il DOM è pronto. '$ (window) .on ('load')' si attiva quando tutto è caricato, ma solo il collegamento del gestore di eventi onload direttamente all'immagine sarebbe migliore IMO. – adeneo

17

ci sono img.naturalHeight e img.naturalWidth che vi darà la larghezza e l'altezza dell'immagine stessa, e non l'elemento DOM.

+2

Questa è un'ottima soluzione. – SoonDead

+3

Non funziona in IE8 o in basso, e non in Opera, per quanto ne so. – adeneo

+2

Interessante. Si noti che per IE, questo è per IE9 o superiore. L'ho cercato e sono incappato in questo frammento che aggiunge '.naturalHeight()' e '.naturalWidth()' a jQuery. Ho solo pensato di poter condividere questa informazione qui: http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/ –

2

È possibile utilizzare la seguente funzione che ho creato.

Funzione

function getImageDimentions(imageNode) { 
    var source = imageNode.src; 
    var imgClone = document.createElement("img"); 
    imgClone.src = source; 
    return {width: imgClone.width, height: imgClone.height} 
} 

html:

<img id="myimage" src="foo.png"> 

usare in questo modo

var image = document.getElementById("myimage"); // get the image element 
var dimentions = getImageDimentions(image); // get the dimentions 
alert("width: " + dimentions.width + ", height: " + dimentions.height); // give the user a visible alert of the dimentions 
Problemi correlati