Czy istnieje wiarygodny, niezależny od platformy sposób określania fizycznych wymiarów elementu o <img src='xyz.jpg'>
zmienionym rozmiarze po stronie klienta?
javascript
image
Pekka
źródło
źródło
img.onload = function () {console.log(img.height, img.width)}
Odpowiedzi:
Masz 2 opcje:
Opcja 1:
Wyjąć
width
iheight
atrybuty i czytaćoffsetWidth
ioffsetHeight
Opcja 2:
Utwórz
Image
obiekt JavaScript , ustawsrc
i przeczytajwidth
iheight
(nie musisz nawet dodawać go do strony, aby to zrobić).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 }
Edycja autorstwa Pekka : Jak uzgodniono w komentarzach, zmieniłem funkcję tak, aby działała po zdarzeniu „załadowania” obrazu. W przeciwnym razie przy dużych obrazach
height
iwidth
nic nie zwróci, ponieważ obraz nie został jeszcze załadowany.źródło
newImg.onload
funkcją upewniającą się, że obraz jest ładowany, gdy ustawiam szerokość / wysokość. Czy zgadzasz się, że odpowiednio edytuję twoją odpowiedź?if(newImg.complete || newImg.readyState === 4) newImg.onload();
na końcu swojej funkcji, naprawi to problem w Chrome / OSX, który powoduje, że ładowanie nie uruchamia się, gdy obrazy są ładowane z pamięci podręcznej.Obrazy (przynajmniej w przeglądarce Firefox) mają
naturalWidth
właściwość / height, dzięki czemu można jej użyćimg.naturalWidth
do uzyskania oryginalnej szerokościvar img = document.getElementsByTagName("img")[0]; img.onload=function(){ console.log("Width",img.naturalWidth); console.log("Height",img.naturalHeight); }
Źródło
źródło
Możesz wstępnie załadować obraz do obiektu Image w javascript, a następnie sprawdzić właściwości szerokości i wysokości tego obiektu.
źródło
/* 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);
źródło
element
jest wybór jQuery? A co z wysokością?Zmieniam tylko trochę drugą opcję Gabriela, aby była łatwiejsza w użyciu:
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%">
Przykładowe połączenie:
getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) { // do what you want with the image's size. var ratio = imgSize.height / $("#_temp_circlePic").height(); });
źródło