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();
});
如果图像可以从缓存立即拔出,那么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);
});
}
,我们可以在代码中保留你建议的代码。请告诉我,如果IE不会触发图像加载事件,那么它是如何在剩余版本中执行的。我们是否应该删除onload事件并保留一些其他的东西? – 2014-09-24 11:50:58
@SiddhuS:你需要在代码中绑定事件,而不是在元素中使用'onload'属性。将如上所示的代码添加到您的脚本中,根据需要调整选择器,如果您有多个,则循环显示图像。您需要在文档的'load'或'ready'事件中执行该操作,以便该元素首先存在。我不知道以前版本的IE的工作方式是否有所不同,这在不同的文档模式下也可能不同,并且IE可能不是唯一能够抑制事件的浏览器。 – Guffa 2014-09-24 12:28:02
,非常感谢。我们是否需要在jQuery中实现上述更改?为什么因为上面的代码是用javascript编写的,而您建议的代码似乎在jQuery中。 – 2014-09-24 12:32:29
您可以在'onload'中调用'resize_images',但代码中的函数是'resize_imgs'。他们应该是相同的,还是你有更多的代码? – Guffa 2014-09-23 10:56:40
@TrueBlueAussie:是的,但那不是我问到的。 'onload'中的代码调用'resize_images'函数,这个函数不包含在这里,并且没有向函数'resize_imgs'显示调用。 – Guffa 2014-09-23 11:01:56
@Guffa非常感谢你通过it.I修改了代码,这里的onload函数是'resize_imgs(140,140,112,112)',我错误地更新了。现在我纠正了它。 – 2014-09-23 11:38:48