JavaScript的图像调整大小在IE11中不能正常工作,但在工作的版本(10,9,8)

问题描述:

我在我的应用程序中使用wicket框架(html + java),当我需要调整图像时组件加载。代码在IE8,9,10中正常工作,但它在IE11中有时会失败。 有些时候它可以调整大小,但有时它不能这样做。当它失败时,它不会进入JavaScript代码。 请帮我解决这个问题。JavaScript的图像调整大小在IE11中不能正常工作,但在工作的版本(10,9,8)

<img wicket:id="bigImage" onload="resize_imgs(140,140,112,112)" /> 

这里上述图像compnenet是调用下面的JavaScript代码,并且将借此在所述图像大小调整。

<script type="text/javascript"> 
    function resize_imgs(maxht, maxwt, minht, minwt) { 
     alert("first line"); 
     var imgs = document.getElementsByTagName('img'); 
     var resize_img = function (img, newht, newwt) { 
      img.height = newht; 
      img.width = newwt; 
      alert("in resize image function :newht" + newht + "newwt:" + newwt); 
     }; 
     for (var i = 0; i < imgs.length; i++) { 
      var img = imgs[i]; 
      if (img.height > maxht || img.width > maxwt) { 
       var old_ratio = img.height/img.width; 
       var min_ratio = minht/minwt; 
       if (old_ratio === min_ratio) { 
        alert("ratios equal"); 
        resize_img(img, minht, minwt); 
       } 
       else { 
        var newdim = [img.height, img.width]; 
        newdim[0] = minht; 
        newdim[1] = newdim[0]/old_ratio; 
        if (newdim[1] > maxwt) { 
         newdim[1] = minwt; 
         newdim[0] = newdim[1] * old_ratio; 
        } 
        alert("ratios not equal"); 
        resize_img(img, newdim[0], newdim[1]); 
       } 
      } 
     } 
    } 
</script> 

UPDATE1:

在我appllication有大量的图像在一个页面,当我们点击图片或打开该网页时,先取图像或点击图像,并将其设置在顶部所以无论何时加载组件(img wicket:id =“bigImage”onload =“resize_imgs(140,140,​​112,112)”/>),我们将调用onload event.Now我一直在尝试与jquery.I更新它的问题。请您建议我是否正确。

<img class="resizeImage" wicket:id="bigImage" /> 


$(document).ready(function(){ 
$(".resizeImage").one("load", function() { 
// do stuff 
var maxht=140; 
var maxwt =140; 
var minht=112; 
var minwt=112; 
var img_height = $(this).height(); 
var img_width = $(this).width(); 

    if (img_height > maxht || img_width > maxwt) { 
    var old_ratio = img_height/img_width; 
    var min_ratio = minht/minwt; 
    if (old_ratio === min_ratio) { 
     $(this).css('height',minht); 
     $(this).css('width',minwt); 
    } 
    else { 
    var newdim = [img_height, img_width]; 
    newdim[0] = minht; 
    newdim[1] = newdim[0]/old_ratio; 
    if (newdim[1] > maxwt) { 
     newdim[1] = minwt; 
     newdim[0] = newdim[1] * old_ratio; 
    } 
    $(this).css('height',newdim[0]); 
    $(this).css('width',newdim[1]); 
    } 
}}).each(function() { 
     if(this.complete) $(this).load(); 
    }); 
+0

您可以在'onload'中调用'resize_images',但代码中的函数是'resize_imgs'。他们应该是相同的,还是你有更多的代码? – Guffa 2014-09-23 10:56:40

+1

@TrueBlueAussie:是的,但那不是我问到的。 'onload'中的代码调用'resize_images'函数,这个函数不包含在这里,并且没有向函数'resize_imgs'显示调用。 – Guffa 2014-09-23 11:01:56

+0

@Guffa非常感谢你通过it.I修改了代码,这里的onload函数是'resize_imgs(140,140,​​112,112)',我错误地更新了。现在我纠正了它。 – 2014-09-23 11:38:48

如果图像可以从缓存立即拔出,那么IE将根本不触发load事件的图像。

您可以检查图像的complete属性是否为true。然后图像已经加载,你不会得到一个load事件,所以你可以直接调用该函数。示例:

var image = $('img'); 
if (image.prop('complete')) { 
    resize_imgs(140,140,112,112); 
} else { 
    image.load(function(){ 
    resize_imgs(140,140,112,112); 
    }); 
} 
+0

,我们可以在代码中保留你建议的代码。请告诉我,如果IE不会触发图像加载事件,那么它是如何在剩余版本中执行的。我们是否应该删除onload事件并保留一些其他的东西? – 2014-09-24 11:50:58

+1

@SiddhuS:你需要在代码中绑定事件,而不是在元素中使用'onload'属性。将如上所示的代码添加到您的脚本中,根据需要调整选择器,如果您有多个,则循环显示图像。您需要在文档的'load'或'ready'事件中执行该操作,以便该元素首先存在。我不知道以前版本的IE的工作方式是否有所不同,这在不同的文档模式下也可能不同,并且IE可能不是唯一能够抑制事件的浏览器。 – Guffa 2014-09-24 12:28:02

+0

,非常感谢。我们是否需要在jQuery中实现上述更改?为什么因为上面的代码是用javascript编写的,而您建议的代码似乎在jQuery中。 – 2014-09-24 12:32:29