在IE上获取图像加载时的图像宽度失败

时间:2010-12-17 15:39:34

标签: javascript image image-loading

我有一个图像缩放功能,可以按比例调整图像大小。在每个图像上加载一个调用此函数的图像,如果其宽度或高度大于我的最大宽度和最大高度,则调整大小。我可以在FF Chrome Opera Safari中获得img.width和img.height但是IE失败了。我怎么处理这个?

让我用一段代码来解释。

<img src="images/img01.png" onload="window.onImageLoad(this, 120, 120)" />

function onImageLoad(img, maxWidth, maxHeight) {
     var width = img.width; // Problem is in here
     var height = img.height // Problem is in here
}

在myligted行中,img.width不适用于IE系列。

有什么建议吗?

感谢。

8 个答案:

答案 0 :(得分:22)

请勿使用widthheight。请改用naturalWidthnaturalHeight。它们提供了图像文件中未缩放图像尺寸的图像,可以在浏览器中使用。

答案 1 :(得分:4)

伙计,我正在寻找这个2天。感谢。

我正在使用jQuery,但这并不重要。问题与IE中的javascript有关。

我之前的代码:

var parentItem = $('<div/>')
   .hide();      // sets display to 'none'

var childImage = $('<img/>')
   .attr("src", src)
   .appendTo(parentItem)   // sets parent to image
   .load(function(){
      alert(this.width);  // at this point image is not displayed, because parents display parameter is set to 'none' - IE gives you value '0'
   });

这适用于FF,Opera和Safari,但没有IE。我在IE中得到'0'。

对我来说解决方法:

var parentItem = $('<div/>')
   .hide();

var childImage = $('<img/>')
   .attr("src", src)
   .load(function(){
      alert(this.width);  // at this point image css display is NOT 'none'  - IE gives you correct value
      childImage.appendTo(parentItem);   // sets parent to image
   });

答案 2 :(得分:3)

这就是我解决它的原因(因为它是网站上我唯一不想使用库的js)。

    var imageElement = document.createElement('img');
    imageElement.src = el.href; // taken from a link cuz I want it to work even with no script
    imageElement.style.display      = 'none';

    var imageLoader = new Image();
    imageLoader.src = el.href;
    imageLoader.onload = function() {
        loaderElement.parentElement.removeChild(loaderElement);
        imageElement.style.position     = 'absolute';
        imageElement.style.top          = '50%';
        imageElement.style.left         = '50%';
        // here using the imageLoaders size instead of the imageElement..
        imageElement.style.marginTop    = '-' + (parseInt(imageLoader.height) / 2) + 'px';
        imageElement.style.marginLeft   = '-' + (parseInt(imageLoader.width) / 2) + 'px';
        imageElement.style.display      = 'block';
    }

答案 3 :(得分:1)

这是因为IE无法计算display: none图像的宽度和高度。请改用visibility: hidden

答案 4 :(得分:1)

尝试

 function onImageLoad(img, maxWidth, maxHeight) {
   var width = img.width; // Problem is in here
   var height = img.height // Problem is in here
   if (height==0  && img.complete){
       setTimeOut(function(){onImageLoad(img, maxWidth, maxHeight);},50);
   }

 }

答案 5 :(得分:0)

    var screenW = screen.width;
    var screenH = screen.height;
    //alert( screenW );
    function checkFotoWidth( img, maxw )
    {
        if( maxw==undefined)
            maxw = 200;
        var imgW = GetImageWidth(img.src);
        var imgH = GetImageHeight(img.src);
            //alert(GetImageWidth(img.src).toString()); // img.width); // objToString(img));
        if (imgW > maxw || (img.style.cursor == "hand" && imgW == maxw))
        {
            if (imgW > screenW) winW = screenW;
            else winW = imgW;

            if (imgH > screenH) winH = screenH;
            else winH = imgH;

            img.width=maxw;
            img.style.cursor = "pointer";

            img.WinW = winW;
            img.WinH = winH;
            //alert("winW : " + img.WinW);
            img.onclick = function() { openCenteredWindow("Dialogs/ZoomWin.aspx?img=" + this.src, this.WinW, this.WinH, '', 'resizable=1'); }
            img.alt = "Klik voor een uitvergroting :: click to enlarge :: klicken Sie um das Bild zu vergrössern";
            //alert("adding onclick);
        }
    }

    function GetImageWidth(imgSrc) 
    {
        var img = new Image();
        img.src = imgSrc;
        return img.width;
    } 

    function GetImageHeight(imgSrc) 
    {
        var img = new Image();
        img.src = imgSrc;
        return img.height;
    } 

答案 6 :(得分:0)

我试试这个:

function onImageLoad(img, maxWidth, maxHeight) {
   var width, height;
   if ('currentStyle' in img) {
     width = img.currentStyle.width;
     height = img.currentStyle.height;
   }
   else {
     width = img.width;
     height = img.height;
   }
   // whatever
}

编辑 - 显然如果我尝试了,我会学习它不起作用:-)好吧,“宽度”和“高度”肯定似乎是{{的属性就IE而言,1}}元素。也许问题是“load”事件在错误的时间触发元素。为了检查是否是这种情况,我会尝试这样做:

<img>

答案 7 :(得分:-1)

getDisplay().getImage().setUrl(imgURL);
final Image img = new Image(imgURL);
int w=img.getWidth();
int h=img.getHeight();