ModalDIV,模态DIV

/**
 * @package ModalDiv.js
 * @author: 熊水林(xionglb@163.com)
 * @version:版权所有(2008-7-13)
 *
 * 这个包实现的效果是在页面弹出一个DIV,用户只能关闭它之后才能操作其它的HTML组件
 */

var bodyScrollWidth = 0;
var bodyScrollHeight = 0;
var isIE = navigator.appName.indexOf("Explorer")>-1 ? true : false;

function ModalDiv(id,html,left,top,width,height,border,bgcolor){
    this.globalMasker = new WholePageMasker();
    var divObj = document.getElementById(id);
    if (!divObj){
       divObj = document.createElement("div");
       set_div_style(divObj,id,left,top,width,height,"absolute","solid 1 #000","default","white");
       if (isIE) {
            divObj.style.filter="alpha(opacity=100)";
        }else{
            divObj.style.opacity=1;
        }
    }
    divObj.style.display='block';
    divObj.style.zIndex='1000';
    divObj.innerHTML = html;
    document.body.appendChild(divObj);
    this.object = divObj;
}
ModalDiv.prototype.cancel = function(){
    this.globalMasker.cancel();
    this.object.style.display = "none";
}
/**
 * 这是一个全屏的DIV,可以使页面上所有的元素不被选中
 */
function WholePageMasker(){
    getBodyScrollSize();
    var globalMaskDiv = document.getElementById("globalDiv");
    if (globalMaskDiv == null){
        globalMaskDiv=document.createElement('div');
        globalMaskDiv.style.display='none';
        globalMaskDiv.style.zIndex='999';
        set_div_style(globalMaskDiv, 'globalDiv', '0px','0px',bodyScrollWidth,bodyScrollHeight,"absolute"," #333333 0px solid","default","darkgray");

        if (isIE) {
            globalMaskDiv.style.filter="alpha(opacity=30)";
        }else{
            globalMaskDiv.style.opacity=30/100;
        }
        document.body.appendChild(globalMaskDiv);
    }
    globalMaskDiv.style.display = "block";
    this.observer = new ShowObserver(globalMaskDiv);
    this.observer.disableTag("SELECT");
}
WholePageMasker.prototype.cancel = function(){
    this.observer.enableTag("SELECT");
    this.observer.object.style.display = "none";
}


/*设置DIV的显式属性*/
function set_div_style(obj,id,top,left,width,height,position,border,cursor,background) {
    obj.id = id?id:null;
    obj.style.top = top?top:'0px';
    obj.style.left = left?left:'0px';
    obj.style.width = width?width:'0px';
    obj.style.height = height?height:'0px';
    obj.style.position = position?position:"static";
    obj.style.border = border?border:"1px #000 solid";
    obj.style.cursor = cursor?cursor:"default";
    obj.style.background = background?background:"";
}

function getBodyScrollSize(){
    bodyScrollWidth = document.documentElement.scrollWidth;
    bodyScrollHeight = document.documentElement.scrollHeight
}

 //---------------------------------------------------------------------------------//
/**
 * 通常,下拉框Select的显示级别很高,会挡住<div>等元素的显示。
 * 要使这些元素正常显示有三种方法:
 *   1. 使select的display隐藏
 *   2. <iframe>优先于select
 *   3. <object>优先于select
 *
 *   这里通过第一种方法,实现Div遮挡Select
*/
function ShowObserver(observer){
   this.object = observer;
   this.hiddenElements = new Array();   //要隐藏的元素数组
   this.disabledElements = new Array();
}
ShowObserver.prototype.hideAll = function(){
     this.hideTag("SELECT");
     this.hideTag("OBJECT");
     this.hideTag("IFRAME");
}
ShowObserver.prototype.hideTag = function(tagName){
    try{
        var elements = document.getElementsByTagName(tagName);
        for (i=0,len=elements.length; i<len; i++){
            var tmpObject = elements[i];
            if (maskOver(tmpObject, this.object)){
                this.hiddenElements.push(tmpObject);
                tmpObject.style.visibility = "hidden";
            }
        }
    }catch(e){
        alert(e.message)
    }
}
ShowObserver.prototype.showAll = function(){
   for (var i=0,len=this.hiddenElements.length; i<len; i++){
       var objTemp = this.hiddenElements[i];
       objTemp.style.visibility = ''
   }
   hiddenElements = new Array();
}
//提高zIndex,以覆盖其它标签
ShowObserver.prototype.promoteTag = function(tagName){
    try{
        var maxZindex = 2;
        var elements = document.getElementsByTagName(tagName);
        for (i=0,len=elements.length; i<len; i++){
            var tmpObject = elements[i];
            if (maskOver(this.object,tmpObject) && this.object!=tmpObject){
               var index = tmpObject.style.zIndex;
               if (index && index>maxZindex){
                  maxZindex = index;
               }
            }
        }
        this.object.style.zIndex = maxZindex+1;
    }catch(e){
        alert(e.message)
    }
}
ShowObserver.prototype.disableTag = function(tagName){
    try{
        var elements = document.getElementsByTagName(tagName);
        var array = new Array(tagName);
        for (i=0,len=elements.length; i<len; i++){
            var tmpObject = elements[i];
            if (maskOver(tmpObject,this.object) && this.object!=tmpObject){
               tmpObject.disabled = true;
               array.push(tmpObject);
            }
        }
        this.disabledElements.push(array);
    }catch(e){
        alert(e.message)
    }
}
ShowObserver.prototype.enableTag = function(tagName){
    for (var i=0,len=this.disabledElements.length; i<len; i++){
        var array = this.disabledElements[i];
        if (array[0] != tagName)  continue;
        for (var j=1,size=array.length; j<size; j++){
           array[j].disabled = false;
        }
    }
}
//----------------------------------------------------------------------------------------
function MovableElement(element){
   element.onmousedown = function(){
      if (event.button == 1){
         this.moving = true;
         this.setCapture();
         this.x0 = event.clientX - element.style.pixelLeft;
         this.y0 = event.clientY - element.style.pixelTop;
      }
   };
   element.onmousemove = function(){
      if (this.moving){
         this.style.cursor = "move";
         this.style.left = event.clientX - this.x0;
         this.style.top = event.clientY - this.y0;
      }
   };
   element.onmouseup = function(){
      this.releaseCapture();
      this.style.cursor = "default";
      this.moving = false;
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值