无法在IE8中使图像预加载正常工作

时间:2011-02-11 12:24:38

标签: jquery internet-explorer-8 preloader

我正在制作一个图像幻灯片,允许用户在半全屏幕中循环显示一组图像。这是它的开发版本:

[已删除链接,仅为临时链接]

有几种方法可以进入下一张图像:单击大图像,选择特定的拇指,使用箭头图标甚至是键盘箭头。所有这些基本上都使用正确的参数调用js函数loadImage:

    function loadImage(id,url) {

        // general image loading routine

        // enable loader indicator
        $("#loading").toggle();

        var imagePreloader = new Image();
        imagePreloader.src = url;
        loading = true;
        $(imagePreloader).load(function() {

            // load completed, hide the loading indicator
            $("#loading").toggle();

            // set the image src, this effectively shows the image
            var img = $("#bigimage img");
            img.attr({ src: url });

            // reset the image dimensions based upon its orientation
            var wide = imagePreloader.width >= imagePreloader.height;
            if (wide) {
                img.addClass('wide');
                img.removeClass('high');
                img.removeAttr('height');
            } else {
                img.addClass('high');
                img.removeClass('wide');
                img.removeAttr('width');
            }

            // update thumb status
            $(".photos li.active").removeClass('active');
            $("#li-" + id).addClass('active');

// get the title from the active thumb and set it on the big image
var imgTitle = $("#li-" + id + " a").attr('title');
log(id + ":" + imgTitle);
        $(".caption h1").text(imgTitle);

        // loading routine completed
        loading = false;

        //return true;
        });
}

这里有很多东西与问题无关,但重点是实际预加载和显示所请求的图像。整体在Firefox和Chrome中都运行良好,但在IE8中没有任何反应。奇怪的是,它在我第一次点击下一个箭头或使用键盘箭头时确实有效,之后它就会失败。

我很难调试这个。在单步执行代码时,我发现尽管确保传入的URL是正确的,但实际上从未调用load事件处理程序。我尝试过使用imagePreloader.onLoad(没有jQuery),但也没有效果。我很难调试这个并理解它为什么第一次工作。

1 个答案:

答案 0 :(得分:3)

这听起来像是由于图像缓存。在某些情况下,当映像缓存在浏览器缓存中时,.load()无法触发事件处理程序。有关此问题,请参阅this post

请参阅$.fn.imagesLoaded jQuery plugin