JQuery Preloader аддон не работает в IE 8 и ниже...
Я использовал следующий скрипт предварительной загрузки, чтобы загрузить все изображения, а затем переключить два параметра отображения 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 ответ
Этот плагин делает что-то неправильно, один из которых связан с проблемой с 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()
,