【发布时间】:2011-03-21 22:32:06
【问题描述】:
我的主页上有一个手风琴风格的功能部分,它在 IE 7/8、FF、Opera 和 Chrome 中可以正常工作,但在 IE 9 中不能正常工作。该站点位于http://ntwo.com。我尝试过使用不同版本的 JQuery(v1.4.1、v1.4.2、v1.5.1、v1.5.1rc1),但都没有解决这个问题。我必须提到它有时可以正常工作。
行为如下: 当它按预期运行时,预加载 5 张图像,然后在加载完成后从左到右显示。当图像正在预加载时,“正在加载”的图像会在它们各自的位置旋转。所有图像都是 .png 文件,但是,我也使用 jpeg 进行了测试,结果相同。当我说它正常工作时有时...似乎有时在单击刷新按钮或主页链接或徽标时会导致它正常工作,但如果之后再次刷新,它下次通常不会工作。当它无法工作时,“加载”图像只是不断旋转,但最终图像永远不会显示。
以下代码是我用来预加载图像的代码:(完整的 js 文件位于 http://ntwo.com/scripts/custom.js)
{
$.fn.super_image_preloader = function (options)
{
var defaults = {
repeatedCheck: 550,
fadeInSpeed: 1100,
delay: 200,
callback: ''
};
var options = $.extend(defaults, options);
return this.each(function ()
{
var imageContainer = jQuery(this),
images = imageContainer.find('img').css(
{
opacity: 0,
visibility: 'hidden'
}),
imagesToLoad = images.length;
imageContainer.operations = {
preload: function ()
{
var stopPreloading = true;
images.each(function (i, event)
{
var image = $(this);
if (event.complete == true)
{
imageContainer.operations.showImage(image);
}
else
{
image.bind('error load', {
currentImage: image
}, imageContainer.operations.showImage);
}
});
return this;
},
showImage: function (image)
{
imagesToLoad--;
if (image.data.currentImage != undefined)
{
image = image.data.currentImage;
}
if (options.delay <= 0) image.css('visibility', 'visible').animate(
{
opacity: 1
}, options.fadeInSpeed);
if (imagesToLoad == 0)
{
if (options.delay > 0)
{
images.each(function (i, event)
{
var image = $(this);
setTimeout(function ()
{
image.css('visibility', 'visible').animate(
{
opacity: 1
}, options.fadeInSpeed);
}, options.delay * (i + 1));
});
if (options.callback != '')
{
setTimeout(options.callback, options.delay * images.length);
}
}
else if (options.callback != '')
{
(options.callback)();
}
}
}
};
imageContainer.operations.preload();
});
}
})(jQuery);
我不知道这是否是问题所在,非常感谢任何见解。
谢谢, 埃里克
【问题讨论】:
-
你的牙套风格让我想杀人(比如你)。如果没有 jsbeautifier,你的代码几乎是不可复制的。
-
我是这段代码的最终用户,不是我写的。我不是 js 开发人员,“还”。这最初都在一行代码中。我用我有限的知识做了我能做的,只是通过jsbeautifier运行它,我会更新它。感谢您与我分享。
-
JQuery 1.5.1 是合适的版本;这是第一个兼容 IE9 的版本。您是否查看了您的网络流量(例如使用 Fiddler)以确保所有图像都被下载?
-
@EricLaw -MSFT-,感谢 Fiddler 的提示。是的,正在下载图像。我目前正在使用 JQuery 1.5.1
-
@eupton:好的,然后是你/代码的开发者/;)
标签: jquery internet-explorer-9