JQuery Preloader аддон не работает в IE 8 и ниже ... - PullRequest
1 голос
/ 17 февраля 2012

Я использовал следующий сценарий предварительной загрузки, чтобы загрузить все изображения, а затем переключить два параметра отображения div, чтобы пользователь не мог увидеть сайт «вместе».Проблема, конечно, в IE 8 и ниже отказываются переключаться.Я рассмотрел несколько проблем и ошибок предварительного загрузчика, и все они ссылаются на кеширование, но я еще не нашел фактического решения ... Любая помощь будет принята с благодарностью.Вот код:

Расширение:

(function($) {
var imgList = [];
$.extend({
    preload: function(imgArr, option) {
        var setting = $.extend({
            init: function(loaded, total) {},
            loaded: function(img, loaded, total) {},
            loaded_all: function(loaded, total) {}
        }, option);
        var total = imgArr.length;
        var loaded = 0;

        setting.init(0, total);
        for(var i in imgArr) {
            imgList.push($("<img />")
                .attr("src", imgArr[i])
                .load(function() {
                    loaded++;
                    setting.loaded(this, loaded, total);
                    if(loaded == total) {
                        setting.loaded_all(loaded, total);
                    }
                })
            );
        }

    }
});
})(jQuery);

Код для его вызова:

$(function() {
<? if ($dir = opendir('images')) {
        $images = array();
        while (false !== ($file = readdir($dir))) {
            if ($file != "." && $file != "..") {
                $images[] = $file; 
            }
        }
        closedir($dir);
        foreach($images as $image) {
            if(stristr($image, '.')) 
            $preload .= "'images/".$image."',";
        }
        $preload = substr($preload, 0, -1);
    }?>

    $.preload([<?=$preload?>], 
    {
        loaded_all: function(loaded, total) {
            $('#main_loading').css('display', 'none');
            $('#container').css('display', 'block');
        }
    });

});

Я забыл, где я изначально нашел этот код, но изменилэто немного, чтобы удовлетворить мои потребности.Наш сайт разработчиков, где это можно увидеть, выглядит следующим образом: http://www.branninggroup.com/backbeat/media_player/

Я добавил временное исправление, чтобы оно частично работало прямо сейчас в IE, заставив 10 секундное ожидание перед его отображением, но, очевидно, скорее всего сможетзнать, когда все изображения загружены для отображения страницы .... любые советы / рекомендации будут с благодарностью.

1 Ответ

1 голос
/ 17 февраля 2012

Этот плагин делает что-то неправильно, один из которых связан с проблемой IE и событием load.

Вам необходимо определить событие load, а затем установить свойство / атрибут src.

Попробуйте заменить его на ...

(function($) {
var imgList = [];
$.extend({
    preload: function(imgArr, option) {
        var setting = $.extend({
            init: function(loaded, total) {},
            loaded: function(img, loaded, total) {},
            loaded_all: function(loaded, total) {}
        }, option);
        var total = imgArr.length;
        var loaded = 0;

        setting.init(0, total);
        for (var i = 0; i < total; i++) {
            imgList.push($("<img />")
                .load(function() {
                    loaded++;
                    setting.loaded(this, loaded, total);
                    if(loaded == total) {
                        setting.loaded_all(loaded, total);
                    }
                })
                .attr("src", imgArr[i]);

            );
        }

    }
});
})(jQuery);

Я также изменил цикл for (in) на обычный цикл for. Вы не хотите углубляться в цепь prototype. Вы также можете использовать $.each().

...