js工具方法弹出蒙版

复制代码 代码如下:

  //工具方法弹出蒙版 add by dning 2012-11-4

  var maskShow = (function () {

  var mask = null;

  var curr = null;

  var free = false;

  var func = {

  onresize: null,

  onscroll: null

  };

  return function (el, fre, Type) {

  if (!mask) {

  initMask();

  }

  free = !!fre;

  if (el == null) {

  show(curr, false);

  show(mask, false);

  showSelects(true); //for ie6

  curr = null;

  if (!free) for (var s in func) {

  window[s] = func[s];

  func[s] = null;

  }

  } else {

  if (curr)

  show(curr, false);

  curr = $(el)[0];

  checkVisib(curr);

  rePos();

  mask.style.zIndex = maskShow.zIndexBack || 15;

  curr.style.zIndex = maskShow.zIndexFore || 20;

  show(curr, true);

  show(mask, true);

  showSelects(false, el); //for ie6

  if (!free) for (var s in func) {

  func[s] = window[s];

  window[s] = rePos;

  }

  }

  if (Type == 0) {

  mask.style.width = document.body.clientWidth + 'px';

  mask.style.height = document.body.clientHeight + 'px';

  if (el) el.style.position = "fixed";

  } else {

  mask.style.width = "0px";

  mask.style.height = "0px";

  if (el) el.style.position = "absolute";

  }

  };

  function showSelects(b, box) {

  if (!browser.IE6) return;

  var sel = document.getElementsByTagName('select');

  var vis = b ? 'visible' : 'hidden';

  for (var i = 0; i < sel.length; i++) {

  if ((b || !childOf(sel[i], box)) && sel[i].currentStyle.visibility != vis) sel[i].style.visibility = vis;

  }

  }

  function childOf(a, b) {

  while (a && a != b) a = a.parentNode;

  return a == b;

  }

  function initMask() {

  /*

  mask=document.createElement('iframe');

  mask.src='://0';

  */

  mask = document.createElement('div');

  mask.style.cssText = 'background-color:{$c};border:none;position:absolute;visibility:hidden;opacity:{$a};filter:alpha(opacity={$A})'.replaceWith({

  c: maskShow.bgColor || '#000',

  a: maskShow.bgAlpha || '0.5',

  A: maskShow.bgAlpha ? parseInt(maskShow.bgAlpha * 100) : '50'

  });

  document.body.appendChild(mask);

  maskShow.mask = mask;

  }

  function checkVisib(el) {

  var sty = el.style;

  sty.position = 'absolute';

  sty.left = '-10000px';

  sty.top = '-10000px';

  sty.visibility = 'visible';

  sty.display = 'block';

  sty.zIndex = 10;

  }

  function rePos() {

  if (!curr) return;

  var ps = $pageSize('doc');

  setRect(mask, ps);

  var rc = centerPos(ps, curr.offsetWidth, curr.offsetHeight);

  if (rc.left < ps.scrollLeft) rc.left = ps.scrollLeft;

  if (rc.top < ps.scrollTop) rc.top = ps.scrollTop;

  setRect(curr, rc);

  }

  function centerPos(ps, cw, ch) {

  return {

  left: ((ps.winWidth - cw) >> 1) + ps.scrollLeft + (maskShow.adjustX || 0),

  top: ((ps.winHeight - ch) >> 1) + ps.scrollTop + (maskShow.adjustY || 0)

  };

  }

  function setRect(el, rect) {

  var sty = el.style;

  sty.left = (rect.left || 0) + 'px';

  sty.top = (rect.top || 0) + 'px';

  if ('width' in rect)

  sty.width = rect.width + 'px';

  if ('height' in rect)

  sty.height = rect.height + 'px';

  }

  function show(el, b) {

  if (!el) return;

  el.style.visibility = 'visible';

  if (!b) {

  el.style.left = -el.offsetWidth - 100 + 'px';

  el.style.top = -el.offsetHeight - 100 + 'px';

  }

  }

  })();