How to add alpha filter to any HTML element and keep the other filters in IE?

前端 未结 3 1204
误落风尘
误落风尘 2020-12-20 21:11

If I have this HTML


Then this javascript works in IE6

         


        
相关标签:
3条回答
  • 2020-12-20 21:33

    After some more testing, I come with this solution

    var filter = function(obj,f,params) {
      var found, nf, dx = "DXImageTransform.Microsoft.";
    
      // check if DXImageTransform.Microsoft.[Filter] or [Filter] filter is set
      try { nf = obj.filters.item(dx+f); found = true; } catch(e) {}
      if(!found) try { nf = obj.filters.item(f); found = true; } catch(e) {}
    
      // filter is set - change existing one
      if(found) {
        nf.Enabled = true; // if exists, it might be disabled
        if(params) for(var i in params) nf[i] = params[i];
      }
    
      // filter is not set - apply new one
      else {
        nf = "";
        if(params) for(var i in params) nf+= i.toLowerCase()+"="+params[i]+",";
        if(params) nf = "("+nf.substr(0,nf.length-1)+")";
        obj.style.filter+= "progid:"+dx+f+nf+" ";
      }
    
      // hasLayout property hack
      if(!obj.style.zoom) obj.style.zoom = 1;
    };
    

    Example

    var obj = document.getElementById("a");
    if(document.body.filters) filter(obj,"Alpha",{Opacity:50});
    

    I hope this works, if anybody finds a problem, please tell me.

    Sources

    obj.filters property http://msdn.microsoft.com/en-us/library/ms537452(VS.85).aspx

    filter.Alpha http://msdn.microsoft.com/en-us/library/ms532967(VS.85).aspx

    0 讨论(0)
  • 2020-12-20 21:51

    You can give n number of filters you want but just keep appending them one after the other separated by a space. For example ,

    STYLE="filter:progid:DXImageTransform.Microsoft.MotionBlur(strength=50)
            progid:DXImageTransform.Microsoft.Alpha(opacity=60);"
    

    Check this link for more : http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx

    I hope that answers your question.

    0 讨论(0)
  • 2020-12-20 21:53

    Unfortunately, it seems to me you can only add new elements through the style.filter property, with filters you can only manipulate already existing ones.

    filter is a collection object, you can find the docs here: filters Collection. It gives you a nice and easy way to play with your existing filters, you can turn them on and off (enabled), etc.

    For example, you can use

    obj.filters.item("DXImageTransform.Microsoft.Alpha").opacity=20;
    

    or (if alpha was you first filter declaration)

    obj.filters.item(0).opacity=20;
    

    CLASSES

    Most of the time you're better off storing your filter declarations under certain classes in your CSS, and only using JS to assign the right classes instead of manipulating style values directly.

    0 讨论(0)
提交回复
热议问题