Antworten:
Sie haben 2 Möglichkeiten:
Option 1:
Entfernen Sie die width
und height
Attribute und lesen offsetWidth
undoffsetHeight
Option 2:
Erstellen Sie ein JavaScript- Image
Objekt, legen Sie das fest src
und lesen Sie das width
und height
(Sie müssen es nicht einmal zur Seite hinzufügen, um dies zu tun).
function getImgSize(imgSrc) {
var newImg = new Image();
newImg.onload = function() {
var height = newImg.height;
var width = newImg.width;
alert ('The image size is '+width+'*'+height);
}
newImg.src = imgSrc; // this must be done AFTER setting onload
}
Edit by Pekka : Wie in den Kommentaren vereinbart, habe ich die Funktion so geändert, dass sie beim "Laden" des Ereignisses des Bildes ausgeführt wird. Andernfalls mit großen Bildern height
und width
würde nichts zurückgeben, da das Bild noch nicht geladen wurde.
newImg.onload
Funktion, um sicherzustellen, dass das Bild geladen wird, wenn ich die Breite / Höhe einstelle. Kannst du deine Antwort entsprechend bearbeiten?
if(newImg.complete || newImg.readyState === 4) newImg.onload();
am Ende Ihrer Funktion hinzufügen , wird das Problem unter Chrome / OSX behoben, das dazu führt, dass der Onload nicht ausgelöst wird, wenn Bilder aus dem Cache geladen werden.
Bilder (mindestens in Firefox) haben die naturalWidth
Eigenschaft / height, sodass Sie img.naturalWidth
die ursprüngliche Breite ermitteln können
var img = document.getElementsByTagName("img")[0];
img.onload=function(){
console.log("Width",img.naturalWidth);
console.log("Height",img.naturalHeight);
}
/* Function to return the DOM object's in crossbrowser style */
function widthCrossBrowser(element) {
/* element - DOM element */
/* For FireFox & IE */
if( element.width != undefined && element.width != '' && element.width != 0){
this.width = element.width;
}
/* For FireFox & IE */
else if(element.clientWidth != undefined && element.clientWidth != '' && element.clientWidth != 0){
this.width = element.clientWidth;
}
/* For Chrome * FireFox */
else if(element.naturalWidth != undefined && element.naturalWidth != '' && element.naturalWidth != 0){
this.width = element.naturalWidth;
}
/* For FireFox & IE */
else if(element.offsetWidth != undefined && element.offsetWidth != '' && element.offsetWidth != 0){
this.width = element.offsetWidth;
}
/*
console.info(' widthWidth width:', element.width);
console.info(' clntWidth clientWidth:', element.clientWidth);
console.info(' natWidth naturalWidth:', element.naturalWidth);
console.info(' offstWidth offsetWidth:',element.offsetWidth);
console.info(' parseInt(this.width):',parseInt(this.width));
*/
return parseInt(this.width);
}
var elementWidth = widthCrossBrowser(element);
element
eine jQuery-Auswahl? Was ist mit der Höhe?
Nur ein bisschen Gabriels zweite Option ändern, um einfacher zu bedienen zu sein:
function getImgSize(imgSrc, callback) {
var newImg = new Image();
newImg.onload = function () {
if (callback != undefined)
callback({width: newImg.width, height: newImg.height})
}
newImg.src = imgSrc;
}
Html:
<img id="_temp_circlePic" src="http://localhost/myimage.png"
style="width: 100%; height:100%">
Beispielanruf:
getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) {
// do what you want with the image's size.
var ratio = imgSize.height / $("#_temp_circlePic").height();
});
img.onload = function () {console.log(img.height, img.width)}