2009-12-02 3 views

Antwort

-8
$this.css('height', 'auto'); 
var height = $this.height(); 
+0

Vielen Dank für die schnelle Antwort, es funktioniert perfekt ^^ – ValiL

+8

$ (this) [0] .naturalHeight wird in modernen Browsern funktionieren, aber von IE6-IE8 sollten Sie nur ein neues Bildelement erstellen und erhalten die Breite und Höhe davon. Das Setzen des CSS auf "Auto" funktioniert nur, wenn dieser Stil die höchste Spezifität hat (was er nicht unbedingt haben muss). Auch die Anzeige des Bildelements und der übergeordneten Elemente wirkt sich darauf aus (Anzeige: Keine auf einem Vorgängerelement bewirkt, dass es 0 zurückgibt). – Jack

+0

@Jack +1 Ihr Plugin ist viel robuster als diese Antwort, siehe auch http://css-tricks.com/snippets/jquery/get-an-images-native-width/ –

1

Das Beste, was Sie tun können, ist ein Bild zu verbergen, ohne die Breite und Höhe einstellen und die Bildquelle für dieses Bild als Originalbild. Dann berechne die Dimension dieses versteckten Bildes.

Oder Sie können die physische Dimension auf der Serverseite berechnen und diese an ein ausgeblendetes Element auf der Seite übergeben und die Größe von diesem verborgenen Elementwert abrufen.

3

Eine Möglichkeit, die Dimensionen eines Bildes zu erhalten, ist dynamisch eine Kopie des Bildes laden mit Hilfe von Javascript und erhalten es Dimensionen ist:

// preload the image 
var height, width = ''; 
var img = new Image(); 
var imgSrc = '/path/to/image.jpg'; 

$(img).load(function() { 
    alert('height: ' + img.height); 
    alert('width: ' + img.width); 
    // garbage collect img 
    delete img; 
}).error(function() { 
    // image couldnt be loaded 
    alert('An error occurred and your image could not be loaded. Please try again.'); 
}).attr({ src: imgSrc }); 
7

Es ist wie die akzeptierte Lösung sieht für mich ändert das Aussehen des Objekts . Gelegentlich ist jQuery ein wenig zu hilfreich und du musst es ihm sagen, um dir aus dem Weg zu gehen. Wenn Sie "naturalWidth" oder "naturalHeight" verwenden möchten, verwenden Sie einfach das bereits vorhandene, indem Sie das jQuery-Objekt in eine native Browserelementreferenz konvertieren.

var Height = document.getElementById($(this).attr("id")).naturalHeight; 
+27

Warum nicht einfach 'this.naturalHeight'? – ThiefMaster

+6

Ich stimme mit ThiefMaster überein. Diese Antwort ist ein schrecklicher Code. 'this.naturalHeight' ist viel schneller, kompakter und arbeitet an allen Objekten, nicht nur an Objekten mit einer ID. – jfriend00

+5

Wenn Sie bereits jQuery verwenden, ist $ (this) [0] die HTMLElement-Instanz oder $ (this) .get (0). Beides ist besser als den getElementById-Aufruf zu wiederholen, da jQuery das für Sie erledigt hat. Es gibt einige (in der Regel nicht browserübergreifende) Attribute, auf die nur von der nativen HTMLElement-Klasse statt von der jquery-Wrapped-Instanz zugegriffen werden kann. –

1

versuchen würde, nur

var width = $("img", this).css('width', 'auto').width(); 
var height= $("img", this).css('height', 'auto').height(); 

ist im Grunde die Berechnung für naturalWidth und naturalHeight ohnehin

2

Hier ein Beispiel einer jQuery-Funktion ist, die älteren Versionen IE arbeitet an auch für große Bilder.

/* 
* NaturalWith calculation function. It has to be async, because sometimes(e.g. for IE) it needs to wait for already cached image to load. 
* @param onNaturalWidthDefined callback(img) to be notified when naturalWidth is determined. 
*/ 
jQuery.fn.calculateNaturalWidth = function(onNaturalWidthDefined) { 
    var img = this[0]; 
    var naturalWidth = img.naturalWidth; 
    if (naturalWidth) { 
     onNaturalWidthDefined(img); 
    } else { //No naturalWidth attribute in IE<9 - calculate it manually. 
     var newImg = new Image(); 
     newImg.src = img.src; 
     //Wait for image to load 
     if (newImg.complete) { 
      img.naturalWidth = newImg.width; 
      onNaturalWidthDefined(img); 
     } else { 
      $(newImg).load(function() {img.naturalWidth=newImg.width; onNaturalWidthDefined(img)}); 
     } 
    } 
}; 

Die Verwendung ist einfach:

$(img).calculateNaturalWidth(function(img) { alert(img.naturalWidth)}); 
1

Quelle Von HERE

Hier eine kurze jQuery ist (jede Version) Plugin, das zwei Methoden ergänzt: naturalWidth() und naturalHeight(). Es verwendet Verzweigung, um zu bestimmen, ob NaturalWidth und NaturalHeight vom Browser unterstützt werden. Wenn die Methode unterstützt wird, wird sie nur zu einem Getter für die Eigenschaft "naturalWidth" oder "naturalHeight". Wenn sie nicht unterstützt wird, erstellt die Methode ein neues unstyled Bildelement und gibt die tatsächliche Breite und Höhe dieses Elements zurück.

// adds .naturalWidth() and .naturalHeight() methods to jQuery 
    // for retreaving a normalized naturalWidth and naturalHeight. 
    (function($){ 
    var 
    props = ['Width', 'Height'], 
    prop; 

    while (prop = props.pop()) { 
    (function (natural, prop) { 
     $.fn[natural] = (natural in new Image()) ? 
     function() { 
     return this[0][natural]; 
     } : 
     function() { 
     var 
     node = this[0], 
     img, 
     value; 

     if (node.tagName.toLowerCase() === 'img') { 
     img = new Image(); 
     img.src = node.src, 
     value = img[prop]; 
     } 
     return value; 
     }; 
    }('natural' + prop, prop.toLowerCase())); 
    } 
    }(jQuery)); 

    // Example usage: 
    var 
    nWidth = $('img#example').naturalWidth(), 
    nHeight = $('img#example').naturalHeight(); 
39

Ich benutze die native Javascript

Attribute

.naturalWidth/.naturalHeight

Auf einem jQuery-Objekt verwenden i

var width = $(this).get(0).naturalWidth; 
var height = $(this).get(0).naturalHeight; 

oder

var width = $("selector").get(0).naturalWidth; 
var height = $("selector").get(0).naturalHeight; 

Wenn kein jQuery-Objekt ausgewählt ist.

With get(0) on a jQuery object you can access the associated DOM-element. Auf dem nativen DOM-Element können Sie mit nativem JavaScript-Code arbeiten (hier greifen Sie auf das nativ Javascript-Attribut .naturalWidth zu)

Verwandte Themen