Ruby's Louvre

每天学习一点点算法

导航

透明度设置

IE在处理透明度上真够恶心,而且在IE7必须让元素的hasLayout为ture,要不会失效。以下是我最新处理透明度的代码:

    var getIEOpacity = function(el){
        var op = 1;
        //这是最快的获取IE透明值的方式,不用正则来处理字符串了!
        if(el.filters.alpha){
            op = el.filters.alpha.opacity;
        }else if(el.filters["DXImageTransform.Microsoft.Alpha"]){
            op = el.filters["DXImageTransform.Microsoft.Alpha"].opacity
        }
        return op  ? op /100 :op//如果是零就不用除100了
    };
    var setIEOpacity = function(el,value){
        if(!el.currentStyle.hasLayout){
            el.style.zoom = 1;//让元素获得hasLayout
        }
        if(el.filters.alpha){
            //必须已经定义过透明滤镜才能使用以下便捷方式
            el.filters.alpha.opacity = value * 100;
        }else{
            el.style.filter = "alpha(opacity="+value *100+")";
        }
        return el;
    };
    var clearOpacity = function(el){
        if(el.filters.alpha){//处理IE
            el.filters.alpha = null;
        }else if(el.filters["DXImageTransform.Microsoft.Alpha"]){//处理IE
            el.filters["DXImageTransform.Microsoft.Alpha"] = null;
        }else{//处理标准游览器
            el.style.opacity = ''
        }
        return el;
    }

如果你有更好的方法,请不吝赐教!

相关链接

posted on 2009-12-10 17:32  司徒正美  阅读(1958)  评论(0编辑  收藏  举报