当前位置: 首页 > 工具软件 > IE PNG Fix > 使用案例 >

iepngfix.htc让PNG-24在IE6中透明的方法 03 iepngfix.htc

杨轶
2023-12-01

<public:component>
<script type="text/javascript">

// IE5.5+ PNG Alpha Fix v2.0 Alpha
// (c) 2004-2009 Angus Turnbull http://www.twinhelix.com

// This is licensed under the GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/

var IEPNGFix = window.IEPNGFix || {};
IEPNGFix.data = IEPNGFix.data || {};


// CONFIG: blankImg is the path to blank.gif, *relative to the HTML document*.
// Try either:
// * An absolute path like:  '/images/blank.gif'
// * A path relative to this HTC file like:  thisFolder + 'blank.gif'
var thisFolder = document.URL.replace(/(  }

 this.hook.enabled = h;
};


IEPNGFix.process = function(elm, init) {
 // Checks the onpropertychange event (on first 'init' run, a fake event)
 // and calls the filter-applying-functions.

 if (
  !/MSIE (5\.5|6)/.test(navigator.userAgent) ||
  typeof elm.filters == 'unknown'
 ) {
  return;
 }
 if (!this.data[elm.uniqueID]) {
  this.data[elm.uniqueID] = {
   className: ''
  };
 }
 var data = this.data[elm.uniqueID],
  evt = init ? { propertyName: 'src,backgroundImage' } : event,
  isSrc = /src/.test(evt.propertyName),
  isBg = /backgroundImage/.test(evt.propertyName),
  isPos = /width|height|background(Pos|Rep)/.test(evt.propertyName),
  isClass = !init && ((elm.className != data.className) &&
   (elm.className || data.className));
 if (!(isSrc || isBg || isPos || isClass)) {
  return;
 }
 data.className = elm.className;
 var blank = this.blankImg.match(/([^\/]+)$/)[1],
  eS = elm.style,
  eCS = elm.currentStyle;

 // Required for Whatever:hover - erase set BG if className changes.
 if (
  isClass && (eS.backgroundImage.indexOf('url(') == -1 ||
  eS.backgroundImage.indexOf(blank) > -1)
 ) {
  return setTimeout(function() {
   eS.backgroundImage = '';
  }, 0);
 }

 // Foregrounds.
 if (isSrc && elm.src && { IMG: 1, INPUT: 1 }[elm.nodeName]) {
  if ((/\.png/i).test(elm.src)) {
   if (!elm.oSrc) {
    // MM rollover compat
    elm.oSrc = elm.src;
   }
   this.fix(elm, elm.src, 2);
  } else if (elm.src.indexOf(blank) == -1) {
   this.fix(elm, '');
  }
 }

 // Backgrounds.
 var bgSrc = eCS.backgroundImage || eS.backgroundImage;
 if ((bgSrc + elm.src).indexOf(blank) == -1) {
  var bgPNG = bgSrc.match(/url[("']+(.*\.png[^\)"']*)[\)"']/i);
  if (bgPNG) {
   if (this.tileBG && !{ IMG: 1, INPUT: 1 }[elm.nodeName]) {
    this.tileBG(elm, bgPNG[1]);
    this.fix(elm, '', 1);
   } else {
    if (data.tiles && data.tiles.src) {
     this.tileBG(elm, '');
    }
    this.fix(elm, bgPNG[1], 1);
    this.childFix(elm);
   }
  } else {
   if (data.tiles && data.tiles.src) {
    this.tileBG(elm, '');
   }
   this.fix(elm, '');
  }
 } else if ((isPos || isClass) && data.tiles && data.tiles.src) {
  this.tileBG(elm, data.tiles.src);
 }

 if (init) {
  this.hook.enabled = 1;
  elm.attachEvent('onpropertychange', this.hook);
 }
};


IEPNGFix.childFix = function(elm) {
 // "hasLayout" fix for unclickable children inside PNG backgrounds.
 var tags = [
   'a',
   'input',
   'select',
   'textarea',
   'button',
   'iframe',
   'object'
  ],
  t = tags.length,
  tFix = [];
 while (t--) {
  var pFix = elm.all.tags(tags[t]),
   e = pFix.length;
  while (e--) {
   tFix.push(pFix[e]);
  }
 }
 t = tFix.length;
 if (t && (/relative|absolute/i).test(elm.currentStyle.position)) {
  alert('IEPNGFix: Unclickable children of element:' +
   '\n\n<' + elm.nodeName + (elm.id && ' id=' + elm.id) + '>');
 }
 while (t--) {
  if (!(/relative|absolute/i).test(tFix[t].currentStyle.position)) {
   tFix[t].style.position = 'relative';
  }
 }
};


IEPNGFix.hook = function() {
 if (IEPNGFix.hook.enabled) {
  IEPNGFix.process(element, 0);
 }
};


IEPNGFix.process(element, 1);

</script>
</public:component>

 类似资料: