Antworten:
Sie haben 2 Möglichkeiten:
Option 1:
Entfernen Sie die widthund heightAttribute und lesen offsetWidthundoffsetHeight
Option 2:
Erstellen Sie ein JavaScript- ImageObjekt, legen Sie das fest srcund lesen Sie das widthund 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 heightund widthwürde nichts zurückgeben, da das Bild noch nicht geladen wurde.
newImg.onloadFunktion, 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 naturalWidthEigenschaft / height, sodass Sie img.naturalWidthdie 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);
elementeine 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)}