2012-10-04 118 views
0

我發現這個腳本在這個網站,這有助於淡入/出透明的PNG在IE沒有透明部分的淡入淡出效果時被塗黑:修改此腳本

var i; 
    for (i in document.images) { 
    if (document.images[i].src) { 
     var imgSrc = document.images[i].src; 
     if (imgSrc.substr(imgSrc.length-4) === '.png' || imgSrc.substr(imgSrc.length-4) === '.PNG') { 
      document.images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='crop',src='" + imgSrc + "')"; 
     } 
    } 
} 

這個腳本是由創建this stackoverflow user,它在我的網站上效果非常好。不過,我想稍微修改一下。該腳本查找我的頁面上的所有.png文件並應用過濾器。但是,這可能會導致性能問題,因爲我在我的網站上有很多透明的.png文件,但我只需要將這個過濾器應用於其中的一個。這是一個固定位置菜單的DIV背景圖像,在頁面滾動時使用jQuery淡入淡出。

有人可以幫我修改這個腳本,這樣我就可以給它提供一個圖像或使用getElementById(「菜單」)並讓它應用這個過濾器。沒有任何我嘗試過似乎工作,並將過濾器放入我的CSS也沒有工作,所以JavaScript的方式似乎是要走的路。我只需要在一個.png上使用它,而不是全部。

請記住這是div #menu的背景圖片,所以圖片本身沒有ID,當然div也是。任何幫助將不勝感激。

+0

堆棧溢出的想法是不提供代碼,但帶來特定的編程問題/問題。如果你想編輯一下,並有問題,或者你已經迷失了方向,請告訴我們其他的方式。 –

+0

我以爲那就是我所做的。我已經迷失了方向,試圖自己修改代碼,所以我來到這裏希望更有經驗的編碼人員能夠發現我的問題簡單並能夠幫助我。 –

回答

0

根據規範,document.images返回一個img元素的集合,所以如果它是background-image,那就行不通了。但是,如果它是在後臺使用的img,它將起作用。如果你只是把它應用到一個圖像,其要知道ID,那麼這將會是

function applyFilterToImageById(id) { 
    var i, 
     parentElement = document.getElementById(id); 
    for (i in parentElement.images) { 
    if (document.images[i].src) { 
     var imgSrc = document.images[i].src; 
     if (imgSrc.substr(imgSrc.length-4) === '.png' || imgSrc.substr(imgSrc.length-4) === '.PNG') { 
      document.images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='crop',src='" + imgSrc + "')"; 
     } 
    } 
} 
+0

嗨saml,感謝您的快速回答。我假設你的意思是('menu')之後的一段時間,而不是分號。無論哪種方式,這似乎並不奏效。請記住,所討論的圖像是#menu div的背景圖像(在css中設置)。我嘗試了諸如「var image = document.getElementById(」menu「)。style.background;」但那也行不通。 –

+0

啊,我不認爲你問的是可能的,因爲'background-image'不是html元素,也不能像一個樣式。 – saml

+0

我認爲必須有一些方法來引用該圖像,因爲我的第一篇文章中的原始腳本完美地適用於該背景圖像。我只是想簡化它,因爲我的頁面上有很多.png文件,但我只需要那個腳本... –