今天,公司的項目中,要求用alpha blending來重畫conqueror的opacity,把瀏覽器的body容器畫透明,目的是為了露出瀏覽器窗口后面播放的流媒體,而那些控制元素還可以看見。為了實現上更容易一些,查找了conqueror是如何實現調節opacity的。
IE里,很容易就可以調節opacity的值,比如一張圖片,它的id="image",那么我們可以用這樣的css來設置。
<style type="text/css">
#image{
filter:alpha(opacity=30);//IE
}
</style>
微軟在它的瀏覽器中,對javascript和css都進行了很多的擴展,css的filter組件就是一個擴展,大學的時候我還花了很多時間來玩filter,后來發現它根本不能在別的瀏覽器工作時,就不用它了。
firefox里,也一樣可以,不過寫法不一樣。代碼如下“
<style type="text/css">
#image{
-moz-opacity:0.30;? //ff
}
</style>
如果在javascript里寫的話,對應的屬性是.style.MozOpacity。
conqueror里,我找到的寫法是:
<style type="text/css">
#image{
-khtml-opacity:0.30;? //conq
}
</style>
但是,我測試發現它不work!,又javascript來控制(.style.KhtmlOpacity),還是不work,到conqueror的官方網站找到的是,3.1版本以后就已經不再支持了!!我一個下午的所有努力就這樣白費了。
另外,還找到一個js函數,用來讓各種瀏覽器支持這個屬性的
?function setOpacity(obj, opacity) {
? opacity = (opacity == 100)?99.999:opacity;
?
? // IE/Win
? obj.style.filter = "alpha(opacity:"+opacity+")";
?
? // Safari<1.2, Konqueror
? obj.style.KHTMLOpacity = opacity/100;
?
? // Older Mozilla and Firefox
? obj.style.MozOpacity = opacity/100;
?
? // Safari 1.2, newer Firefox and Mozilla, CSS3
? obj.style.opacity = opacity/100;
}
函數的第一行,一個三目運算符,好像是針對firefox來設置的。這個函數怎么調用?我不太清楚,我讓body的onload=“setOpacity(image,20)",但是,并沒有效果。我又改了函數,變成這樣:
function setOpacity(obj, opacity) {
? opacity = (opacity == 100)?99.999:opacity;
?
? // IE/Win
? document.all('obj').style.filter = "alpha(opacity:"+opacity+")";
?
? // Safari<1.2, Konqueror
? document.getElementById('obj').style.KHTMLOpacity = opacity/100;
?
? // Older Mozilla and Firefox
? document.getElementById('obj').style.MozOpacity = opacity/100;
?
? // Safari 1.2, newer Firefox and Mozilla, CSS3
? document.getElementById('obj').style.opacity = opacity/100;
}
不好意思,還是不工作。具體為什么?有時間再繼續研究。