lzl836 发表于 2013-2-7 22:59:42

当年写的一个联动菜单

当年写的一个联动菜单。

var Class = {   create: function() {    return function() {      this.init.apply(this, arguments);       }   }   }var Menu=Class.create();Menu.prototype={    init:function(op){      var me=this;      this.interval=null;                this.code=[];      this.text=[];      this.colorRow=[];      this.scrTop=[];      this.msg=['','请选择部门','请选择系','请选择线'];      for(var name in op){            this=op;      }                for(i=0;i<=op.max;i++){            this.scrTop=0;      }      document.body.onclick=function(){me.onclr()};         },    show:function(obj,op){            var div=new createDIV(op.kbn);      div.show();      var self=this;                var me=this.me;      var max=this.max;      div.M.onmouseover=function(){            var n=op.kbn+2;      while($("divMenu" + n).get()){            $("divMenu" + n).html("");      $("divMenu" + n).hide();      $("dvPr" + n).hide();      self.scrTop=0;      n++;      }      };      div.M.oncontextmenu=function(){self.clr() };      if(obj.nodeName=="INPUT"){            $(div.M).html(this.loading());            div.setSize();      }                this.pos(obj,div,op.kbn);                var setData=function(rs){            if(rs){                rs=eval("(" + rs + ")");            }else{                return;            }            if(rs.length==0){                $(div.M).html("<span style='color:silver'>(空白)</span>");                              div.setSize();                               return;            }            var strHtm=[];            var intHight=function(){                if(rs.length > 15){                  return (15 + 1) * 20 + 1;                }else{                  return (rs.length + 1) * 20 + 1;                }            }            strHtm.push("<div id='divList" + op.kbn + "' onmousewheel='" + me + ".wheel(event,this," + op.kbn + ")' style='float:left;overflow:hidden;height:" + intHight() + "px;width:this.offsetWidth px;'>");            strHtm.push("<table id='tabList' style='font-size:15px' border='0' cellpadding='0' cellspacing='0'>");            strHtm.push("<tr style='height:20px'>");            strHtm.push("<td jsData='{cd:\"\",name:\"\",clr:true}' onmouseover='" + me +".over(this," + op.kbn + ")' onclick='" + me + ".write(this," + op.kbn + ")'>--------请选择--------</td>");            strHtm.push("<td></td></tr>");            for(i=0;i<rs.length;i++){                strHtm.push("<tr style='height:20px'> ");                if (op.kbn == 1 || op.kbn==3){                  strHtm.push("<td jsData='{cd:\""+ rs.c +"\",name:\""+ rs.m +"\"}' onmouseover='" + me + ".over(this," + op.kbn + ")' onclick='" + me + ".write(this," + op.kbn + ")'>"+ rs.m +"</td>");                }else{                                    strHtm.push("<td jsData='{cd:\""+ rs.c +"\",name:\"" + rs.r + "(" + rs.c +")\"}'onmouseover='" + me + ".over(this," + op.kbn + ")' onclick='" + me + ".write(this," + op.kbn + ")'>" + rs.m + "(" + rs.c + ")</td>");                }                                    if(op.kbn == max){                                       strHtm.push("<td></td>");                }else{                  strHtm.push("<td style='font-size:10px'>►</td>");                }            }            strHtm.push("</table></div>");            if(rs.length > 15){                strHtm.unshift("<tr><td style='font-size:10px; text-align:center ' onmouseover='" + me + ".startScroll(this,\"up\"," + op.kbn + ")' onmouseout='" + me + ".stopScroll(this)'>▲</td></tr><tr><td>");                strHtm.unshift("<table border='0' cellpadding='0' cellspacing='0'>");                strHtm.push("</td></tr><tr><td style='font-size:10px;text-align:center' onmouseover='" + me + ".startScroll(this,\"down\"," + op.kbn + ")' onmouseout='" + me + ".stopScroll(this)'>▼</td></tr></table>");            }            $(div.M).html(strHtm.join(""));            self.pos(obj,div,op.kbn);            div.setSize();                  }      if(obj.nodeName=="INPUT" && op.kbn>0){            if($(this.hid).val()==""){                $(div.M).html(this.msg);                div.setSize();                return;            }      }               op.cd=op.cd || (this.hid? $(this.hid).val() : "");      newajax.request({            type: "POST",            data: "kbn=" + op.kbn + "&cd=" + op.cd,            url: "../Common/MenuAction.ashx",            success:setData      });            },    over:function(obj,n){      $(obj).css({            filter:"progid:DXImageTransform.Microsoft.Gradient(startColorStr='#002f5e', endColorStr='#3568CC', gradientType='0'",            cursor:"pointer",            color:"white"      });                if(this.colorRow && this.colorRow!=obj){            $(this.colorRow).css({filter:""});            if(this.colorRow.nextSibling){                $(this.colorRow.nextSibling).css({color:""});             }            $(this.colorRow).css({color:""});                   }      var jsData=eval("(" + obj.getAttribute("jsData") + ")");         this.colorRow=obj;      this.code=jsData.cd;      this.text=jsData.name;      $(obj.nextSibling).css({color:"blue"});      if(jsData.clr){            var j=n+1            var id="divMenu" + j;      while($("divMenu" + j).get()){      $("divMenu" + j).hide();      $("dvPr" + j).hide();      this.scrTop=0;      j++;      }         }      else if(n<this.max && this.code){            this.show(obj,{"kbn":n+1,"cd":this.code});      }    },    write:function(obj,n){      for(i=0;i<=n;i++){            if(typeof(this.text)!='undefined'){                $(this.txt).val(this.text);                $(this.hid).val(this.code);            }      }      for(i=n+1;i<=this.max;i++){            $(this.txt).val("");            $(this.hid).val("");      }      this.clr();    },    clr:function(){      for(i=0;i<=this.max;i++){            if($("divMenu"+i).get()){                $("divMenu"+i).html("");                $("divMenu"+i).hide();                $("dvPr"+i).hide();                this.scrTop=0;            }      }      this.code=[];      this.text=[];    },    pos:function(obj,div,n){      var t,l;      var pos=this.posXY(obj);      if(obj.nodeName=="INPUT"){            div.pos(pos.top+obj.offsetHeight,pos.left);                  }else{            if(parseInt(pos.top+div.M.offsetHeight-this.scrTop,10)>parseInt(getScreenHeight()-20,10)){                               t=getScreenHeight()-div.M.offsetHeight-10+this.scrTop;            }else{                t=pos.top;             }            if(parseInt(div.M.style.top, 10) <0){                t = 0;            }            l=pos.left+obj.offsetWidth+10;            div.pos(t-this.scrTop,l);      }    },    posXY:function(obj){      var intTop=obj.offsetTop;      var intLeft=obj.offsetLeft;          try{            while(obj.offsetParent){                obj=obj.offsetParent                intTop+=obj.offsetTop;                intLeft+=obj.offsetLeft;             }      }catch(e){}         return {"top":intTop,"left":intLeft};    },    startScroll:function(obj,flg,n){      var func;      var me=this;      $(obj).css({cursor:"pointer",color:"blue"});      div=$("divList" + n).get();                if(flg=="up"){            func=function(){                try{                  div.scrollTop-=1;                  me.scrTop=div.scrollTop;                }catch(e){}            }      }else{            func=function(){                try{                  div.scrollTop+=1;                  me.scrTop=div.scrollTop;                }catch(e){}            }      }      this.interval=window.setInterval(func, 10);         },    stopScroll:function(obj){      $(obj).css({color:""});      window.clearInterval(this.interval);      this.interval=null;    },    wheel:function(e,obj,n){            if(e.wheelDelta>0){            obj.scrollTop-=15;      }else{            obj.scrollTop+=15;      }      this.scrTop=obj.scrollTop;    },    onclr:function(){         //var me=this;      var obj=window.event.srcElement;      if(obj.nodeName!='INPUT' && this.kbn(obj)==null){            this.clr();      }    },    kbn:function(obj){      while(obj.nodeName!="BODY"){            for(i=0;i<=this.max;i++){                if(obj.id=="divMenu"+i) return i;            }                   obj=obj.parentNode;      }          return null;      },    loading:function(){      var strHtml=[];      strHtml.push("<table style='width:100px;hight:120px;text-align:center'>");      strHtml.push("<tr>");      strHtml.push("<td><img src='../App_Themes/images/loading.gif'/>");      strHtml.push("</td></tr><tr>");      strHtml.push("<td style='font-size:13px'>正在读取数据...</td>");      strHtml.push("</tr></table>");            return strHtml.join("");    }}function getScreenHeight(){    var objBody = (document.documentElement && document.documentElement.clientWidth)?document.documentElement:document.body;       return (objBody.offsetHeight + objBody.scrollTop);}function createDIV(n){    var div,dvpr;    var show=function(){      $(this.M).show();      $(this.P).show();    }    var pos=function(t,l){      $(this.M).css({top:t,left:l});      $(this.P).css({top:t,left:l});         }    var SetSize=function(){          $(this.P).css({width:this.M.offsetWidth + "px",height:this.M.offsetHeight + "px"})      $(this.P.childNodes).css({height:this.M.offsetHeight + "px"});         }    if($("divMenu" + n).get()){      div=$("divMenu" + n).get();      dvpr=$("dvPr" + n).get();      return {M:div,P:dvpr,'show':show,'pos':pos,'setSize':SetSize};    }    div=document.createElement("DIV");    div.id="divMenu" + n;    div.className="menu";    $(div).css({padding:'10px',position:"absolute",zIndex:100+n});    $(div).hide();    document.body.appendChild(div);    dvpr=document.createElement("<div id='dvPr"+n+"' style='position:absolute; display:none;z-index:"+ (90+n) +"px;width:0px'></div>");    $(dvpr).html("<iframeframeborder=0 width='100%'height='100%' id=ifr"+ n +" scrolling=no></iframe>");    document.body.appendChild(dvpr);    return {M:div,P:dvpr,'show':show,'pos':pos,'setSize':SetSize};    }function $(id){    return {      get:function(){            return "string" == typeof id ? document.getElementById(id) : id;      },      hide:function(){            this.css({display:"none"});      },      show:function(){            this.css({display:""});      },      html:function(val){            if(val==undefined){                return this.get().innerHTML;            }            this.get().innerHTML=val;      },      val:function(val){            if(val==undefined){                return this.get().value;            }            this.get().value=val;      },      css:function(options){            for ( var name in options ) {    this.get().style[ name ] = options[ name ];    }      }    }}
页: [1]
查看完整版本: 当年写的一个联动菜单