я использую AlphaImageLoader исправить под названием supersleight со следующим кодом:AlphaImageLoader фикс для работы PNG в Интернете, но не локально
var supersleight = function() {
var root = false;
var applyPositioning = true;
// Path to a transparent GIF image
var shim = 'images/empty.gif';
// RegExp to match above GIF image name
//var shim_pattern = /x\.gif$/i;
var fnLoadPngs = function() {
if (root) {
root = document.getElementById(root);
}else{
root = document;
}
for (var i = root.all.length - 1, obj = null; (obj = root.all[i]); i--) {
// background pngs
if (obj.currentStyle.backgroundImage.match(/\_.png/i) !== null) {
bg_fnFixPng(obj);
}
// image elements
if (obj.tagName=='IMG' && obj.src.match(/\_.png$/i) !== null){
el_fnFixPng(obj);
}
// apply position to 'active' elements
if (applyPositioning && (obj.tagName=='A' || obj.tagName=='INPUT') && obj.style.position === ''){
obj.style.position = 'relative';
}
}
};
var bg_fnFixPng = function(obj) {
var mode = 'scale';
var bg = obj.currentStyle.backgroundImage;
var src = bg.substring(5,bg.length-2);
if (obj.currentStyle.backgroundRepeat == 'no-repeat') {
mode = 'crop';
}
obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')";
obj.style.backgroundImage = 'url('+shim+')';
obj.style.visibility= 'visible';
};
var el_fnFixPng = function(img) {
var src = img.src;
img.style.width = img.width + "px";
img.style.height = img.height + "px";
img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
img.src = shim;
img.style.visibility= 'visible';
};
var addLoadEvent = function(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
};
}
};
return {
init: function() {
addLoadEvent(fnLoadPngs);
},
limitTo: function(el) {
root = el;
},
run: function() {
fnLoadPngs();
}
};
}();
// limit to part of the page ... pass an ID to limitTo:
// supersleight.limitTo('header');
supersleight.init();
//Från början är opacity'n 100 eftersom jag inte vet om Javascript är påsatt eller inte och därmed inte vet om PNG'arna kommer att
//bli genomskinliga eller ej. Är Javascript på så gör jag också bakgrunden genomskinlig så att PNG'arnas genomskinlighet inte blir i onödan
//If-satsen eftersom transparency ej existerar på första-sidan och därigenom ger fel där
if(document.getElementById('transparency') != null){
document.getElementById('transparency').style.filter= "alpha(opacity=60)";
document.getElementById('transparency').style.background = "#cccccc";
}
Я называю это через SCRIPT Defer тег в начале HTML-файла. Когда я загружаю скрипт и страницу на сервер, он отлично работает, но когда я пытаюсь его локально, изображение вообще не отображается. В принципе, сценарий устанавливает фон как прежнее изображение PNG с помощью AlphaImageLoader, а затем устанавливает пустой пиксель как IMG src.
Если я закомментировать:
//img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
//img.src = shim;
изображение появляется в нормальном состоянии, то есть как PNG с прозрачностью удалены. Так или иначе, фильтр не устанавливает фон правильно, когда он выполняется локально и оставляет его пустым. Когда вы пытаетесь это сделать в браузерах и IE Netrenderer (ipinfo.info), я получаю тот же результат в Netrenderer, хотя браузеры, Microsoft Expression Web Superpreview 3, тестирование с несколькими членами и IETester показывает, как они должны ...
Любой, кто получил идея?
Оказывается, это потому, что я к нему доступ через файл: // и все это лежит в папке с большим количеством пробелов и странные символы в названии .. .not, что я думал, что это важно, но по-видимому, для того, чтобы этот эффект работал в моем случае, я не могу иметь его в папке, которая не следует простому синтаксису без пробелов и всего ... может быть, это скорее общая проблема Explorer, чем специально AlphaImageLoader ... любой кто хочет просветить меня немного больше в этом вопросе, добро пожаловать! :) более
Одно обновление ... Я могу получить доступ к нему как через Интернет, локальный сервер (локальный) и непосредственно через файл (файл: // или C: //) без проблем. Проблема возникает, когда происходит следующее:
У меня была папка с именем:.
Sirocco v 1.2 (закачанный 100908) PNGfix + bakgrundsfärger_IE5.5-6
Когда с использованием других имен папок проблема никогда не происходили, поэтому я пытался сузить ... кажется, что
)
символ тот, который вызывает проблему .. с ним, AlphaImageLoader не заполняет фон так, как предполагается, но без него, фон заполняется хорошо ... кто-нибудь понял, почему?
Что означает «локально»: «файл: //' URL или «localhost»? –
Вы пробовали установку PNG Fix -> http://labs.unitinteractive.com/unitpngfix.php –
@Pekka файл: // ... hmm. есть ли разница? –