今天,公司的项目中,要求用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;
}
不好意思,还是不工作。具体为什么?有时间再继续研究。