我使用AlphaImageLoader的修復稱爲supersleight用下面的代碼:爲PNG的作品AlphaImageLoader的修復在線,但沒有在本地
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";
}
我通過在HTML文件的開頭的腳本延遲標籤調用它。當我將腳本和頁面上傳到服務器時,它運行良好,但是當我在本地嘗試時,根本沒有顯示任何圖像。基本上,腳本使用AlphaImageLoader將背景設置爲前PNG圖像,然後將空像素設置爲IMG src。
如果我註釋掉:
//img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
//img.src = shim;
的形象出現在正常狀態下,即與透明PNG刪除。不知何故,過濾器在本地完成時不會正確設置背景,並將其保留爲空。當在Browsershots和IE Netrenderer(ipinfo.info)上試用這個功能時,即使Browsershots,Microsoft Expression Web Superpreview 3,使用多個IE和IETester進行測試,它們都應該顯示它們的方式,但在Netrenderer中得到了同樣的結果...
任何人都有一個主意?
原來是因爲我通過文件訪問它://和所有它躺在一個文件夾中有很多的空間和奇怪的字符在其名稱...。不,我認爲會的問題,但顯然,爲了這個效果在我的情況下工作,我不能在一個文件夾不遵循一個簡單的語法沒有空格和東西...也許這是一個比專門的AlphaImageLoader更常見的資源管理器問題...任何人誰願意在這件事情上多點點啓發我是受歡迎的! :)
還有一個更新...我既可以通過網絡訪問,本地服務器(本地主機),並直接通過文件(文件://或C://)沒有問題。當發生以下情況出現該問題:
我有以下名稱的文件夾:
熱風1.2(上傳100908) PNGfix +bakgrundsfärger_IE5.5-6
當使用其他文件夾名稱問題從未發生過,所以我試圖縮小它的範圍...似乎是
)
符號是導致問題的原因之一.. AlphaImageLoader不會按照它應有的方式填充背景,但如果沒有它,背景填充就會正常......任何人都知道爲什麼?
「本地」究竟是什麼意思:一個'file://'URL或'localhost'? – 2010-09-08 12:26:33
您是否嘗試過單位PNG修復 - > http://labs.unitinteractive.com/unitpngfix.php – 2010-09-08 12:32:35
@Pekka file:// ...嗯。有區別嗎? – 2010-09-08 12:44:39