📄 coolmenus4.js
字号:
st = this.frameStartLevel this.body = fromframe.document.body this.doc = fromframe.document this.deftarget=fromframe this.cmpage = new cm_page(fromframe) }else{ this.body=document.body this.doc=document if(this.frames) en = this.frameStartLevel this.deftarget=self } if(!nowrite){ for(i=st;i<en;i++){ //changed 4.06 if(!bw.usedom) this.doc.write(c.l[i].str) else if(i>0) this.body.appendChild(c.l[i].app) if(!this.frames) c.l[i].str=null }}c.z=c.zIndex+2 for(i=st;i<en;i++){oc=0 if(i!=0){bobj=c.l[i].b = new cm_makeObj(c.name + "_"+i+"_0","",c.l[i].app,this.doc); bobj.css.zIndex=c.z; if(bw.dom) bobj.css.overflow='hidden'}; bx=c.l[i].borderX; by=c.l[i].borderY; c.l[i].max=0; for(j=0;j<c.l[i].m.length;j++){ m = c.m[c.l[i].m[j]]; name=m.name; w=m.w; h=m.h; l=m.lev; no=m.nolink; if(i>0){m.b = bobj; nest=i} else{m.b = new cm_makeObj(c.name + "_"+name+"_0","",m.d1,this.doc); m.b.css.zIndex=c.z; m.b.clipTo(0,w+bx*2,h+by*2,0,1); nest=name} id = c.name + "_"+name; nest=c.name + "_"+nest; if(m.create){ o=m.o=new cm_makeObj(id,nest+"_0",m.d2,this.doc); o.z=o.css.zIndex=c.z+1; if(bw.reuse){c.l[l].o[oc]=o; oc++}; if(l==0&&m.img1) o.css.visibility='inherit'; if(bw.op5) o.showIt(); o.arr=0; }if(!bw.reuse||l==0) o.clipTo(0,w,h,0,1); o.moveIt(bx,by); o.z=o.css.zIndex=c.z+2 if(j<c.l[i].arnum){ c.l[i].arr[j]=new cm_makeObj(c.name+"_a"+i+"_"+j,nest+"_0",nowrite?0:c.l[i].arr[j],this.doc) c.l[i].arr[j].css.zIndex=c.z+30+j; }else if(l==0&&m.arr==1){ o.arr=new cm_makeObj(id+"_a",nest+"_0",m.d3,this.doc) o.arr.moveIt(bx+m.w-c.l[i].arrowWidth-3,by+m.h/2-(c.l[i].arrowHeight/2)); o.arr.css.zIndex=c.z+20; }if(!no && !bw.reuse && !m.img1){ o.over=new cm_makeObj(c.name + "_"+name+"_1",nest+"_0"+".document.layers."+id,"",this.doc) o.over.moveIt(0,0); o.over.hideIt(); o.over.clipTo(0,w,h,0,1); o.over.css.zIndex=c.z+3 img=new cm_makeObj(c.name + "_"+name+"_3",nest+"_0"+".document.layers."+id,"",this.doc); img.moveIt(0,0) img.css.visibility="inherit"; img.css.zIndex=c.z+4; if(bw.op5) img.showIt() }c.z++; } } if(fromframe){ ///Set scroll vars - added v4.05 c.chkscroll = function(){//changed 4.06 if (bw.ie&&!bw.ie6) this.scrollY=this.body.scrollTop; else if (bw.ie6 || bw.op7){ if (this.doc.compatMode && document.compatMode != "BackCompat") this.scrollY=this.doc.documentElement.scrollTop else this.scrollY=this.body.scrollTop }else this.scrollY=this.deftarget.pageYOffset; } }}/**Onmouseout**/makeCM.prototype.mout = function(){ //Changed v4.06 var c = this; clearTimeout(c.tim); c.isover = 0; var f="if(!"+c.name+".isover)"+c.name+".hidesub()" if(!c.closeOnClick) c.tim = setTimeout(f,c.wait) else{ if(bw.ns4){ document.captureEvents("Event.MOUSEDOWN"); document.onmousedown=new Function(f)} else document.onclick=new Function(f); if(this.frames){ if(bw.ns4){this.doc.captureEvents("Event.MOUSEDOWN"); this.doc.onmousedown=new Function(f)} else this.doc.onclick=new Function(f) } }}/**Constructing and initiating top items and bar**/makeCM.prototype.construct=function(nowrite){ //Changed v4.06 var c=this; if(!c.l[0]||c.l[0].m.length==0) return cm_message('No menus defined'); if(!nowrite){for(var i=1;i<c.l.length;i++){c.l[i].str+="</div>"}} //Added 4.06 c.makeObjects(nowrite); cmpage = new cm_page(); var mpa,o,maxw=c.maxw,maxh=c.maxh,i,totw=c.totw,toth=c.toth,m,px=c.pxBetween var bx=c.l[0].borderX,by=c.l[0].borderY,x=c.fromLeft,y=c.fromTop,mp=c.menuPlacement,rows=c.rows if(rows){toth=maxh+by*2; totw=totw-px+bx;}else{totw=maxw+bx*2; toth=toth-px+by;} switch(mp){ case "center": x=cmpage.x2/2-totw/2; if(bw.ns4) x-=9; break; case "right": x=cmpage.x2-totw; break; case "bottom": case "bottomcenter": y=cmpage.y2-toth; if(mp=="bottomcenter") x=cmpage.x2/2-totw/2; break; default: if(mp.toString().indexOf(",")>-1) mpa=1; break; }for(var i=0;i<c.l[0].m.length;i++){ m = c.m[c.l[0].m[i]]; o = m.b; if(mpa) rows?x=cm_cp(mp[i]):y=cm_cp(mp[i],0,0,1); o.moveIt(x,y); o.showIt(); if(m.arr) m.o.arr.showIt(); o.oy=y; if(!mpa) rows?x+=m.w+px+bx:y+=m.h+px+by }if(c.useBar==1){ //Background-Bar var bbx=c.barBorderX,bby=c.barBorderY; var bar1=c.bar1= new cm_makeObj(c.name+'bbar_0',c.name+'bbar',nowrite?0:c.bar1,document) var bar=c.bar= new cm_makeObj(c.name+'bbar','',nowrite?0:c.bar,document); bar.css.zIndex=c.zIndex+1 var barx=c.barX=="menu"?c.m[c.l[0].m[0]].b.x-bbx:cm_cp(c.barX,1); var bary=c.barY=="menu"?c.m[c.l[0].m[0]].b.y-bby:cm_cp(c.barY); var barw=c.barWidth=="menu"?totw:cm_cp(c.barWidth,1,bbx*2); var barh=c.barHeight=="menu"?toth:cm_cp(c.barHeight,0,bby*2); bar1.clipTo(0,barw,barh,0,1); bar1.moveIt(bbx,bby); bar1.showIt(); bar.clipTo(0,barw+bbx*2,barh+bby*2,0,1); bar.moveIt(barx,bary); bar.showIt(); }if(c.resizeCheck){ //Window resize code - updated 4.06 - stil sucks if(bw.ns4||bw.op5||bw.op6)setTimeout('window.onresize=new Function("'+c.name+'.resized()")',500) else window.onresize=new Function(c.name+".resized()") c.resized=cm_resized; if(bw.op5||bw.op6) document.onmousemove=new Function(c.name+".resized()") }if(c.onconstruct) eval(c.onconstruct) //onconstruct event c.constructed = 1 //Added v4.05 return true}/**Capturing resize**/var cm_inresize=0function cm_resized(){ if(cm_inresize) return page2=new cm_page(); var off=(bw.op6||bw.op5)?20:5 if(page2.x2<cmpage.x2-off || page2.y2<cmpage.orgy-off || page2.x2>cmpage.x2+off || page2.y2>cmpage.orgy+off){ if(bw.ie||bw.ns6||bw.op7||bw.ns4){ cmpage=page2; this.isresized=1; if(this.onresize) eval(this.onresize); this.construct(1); if(this.onafterresize) eval(this.onafterresize); }else{cm_inresize=1; location.reload()} }}/**Onclick of an item**/makeCM.prototype.onclck=function(m){ //Changed v4.06 m = this.m[m] if(m.onclck) eval(m.onclck); if(this.openOnClick && m.subs.length>0){ this.clicked = 1; this.showsub(m.name); return } var lnk=m.lnk, targ=m.targ if(lnk){ if(lnk.indexOf("mailto")!=0 && lnk.indexOf("http")!=0) lnk=this.root+lnk if(String(targ)=="undefined" || targ=="" || targ==0 || targ=="_self"){ if(this.frames){ //Turning of all level 1 + vars if(this.l[0].a){ this.m[this.l[0].a].active(0,1) this.l[0].a =0 } for(i=this.frameStartLevel;i<this.l.length;i++){ if(this.l[i].b){ this.l[i].b.hideIt() this.l[i].b = null for(j=0;j<this.l[i].m.length;j++){ this.m[this.l[i].m[j]].b = null; } } } this.isover=0 } this.deftarget.location.href=lnk } else if(targ=="_blank") window.open(lnk) else if(targ=="_top" || targ=="window") top.location.href=lnk else if(top[targ]) top[targ].location.href=lnk else if(parent[targ]) parent[targ].location.href=lnk }else return false}makeCM.prototype.onshow+=";this.pagecheck(b,pm,pm.subx,pm.suby,maxw,maxh)"makeCM.prototype.pagecheck=function(b,pm,x,y,w,h,n){ var l=pm.lev+1,a=b.align; if(!n) n=1 var ok=1 if(x<cmpage.x) {pm.align=1; ok=0;} else if(x+w>cmpage.x2){ pm.align=2; ok=0;} else if(y<cmpage.y) { pm.align=3; ok=0;} else if(h+y>cmpage.y2) {pm.align=4; ok=0;} if(!ok) this.getcoords(pm,this.l[l-1].borderX,this.l[l-1].borderY,pm.b.x,pm.b.y,w,h,this.l[l-1].offsetX,this.l[l-1].offsetY) x=pm.subx; y=pm.suby //Added check --- still not ok? --- part of the code by Denny Caldwell (thanks) -- badly immplemented by me though if(x<cmpage.x) {x += cmpage.x-x;} else if(x+w>cmpage.x2){ x = -(x+w-cmpage.x2);} else if(y<cmpage.y) { y = cmpage.y-y; } else if(h+y>cmpage.y2) {y = -(y+h-cmpage.y2);} if(x<cmpage.x) {x += cmpage.x-x;} else if(x+w>cmpage.x2){ x = -(x+w-cmpage.x2);} else if(y<cmpage.y) { y = cmpage.y-y;} else if(h+y>cmpage.y2) {y = -(y+h-cmpage.y2);} b.moveIt(x,y) }/******************************************CM_ADD-IN - hideselectboxes (last updated: 11/13/02)IE5+ and NS6+ only - ignores the other browsersBecause of the selectbox bug in the browsers that makes selectboxes have the highest z-index whatever you do this script will check for selectboxes that interfear withyour menu items and then hide them. Just add this code to the coolmenus js fileor link the cm_addins.js file to your page as well.*****************************************/if(bw.dom&&!bw.op){ makeCM.prototype.sel=0 makeCM.prototype.onshow+=";this.hideselectboxes(pm,pm.subx,pm.suby,maxw,maxh,pm.lev)" makeCM.prototype.hideselectboxes=function(pm,x,y,w,h,l){ var selx,sely,selw,selh,i if(!this.sel){ this.sel=this.doc.getElementsByTagName("SELECT") this.sel.level=0 } var sel=this.sel for(i=0;i<sel.length;i++){ selx=0; sely=0; var selp; if(sel[i].offsetParent){selp=sel[i]; while(selp.offsetParent){selp=selp.offsetParent; selx+=selp.offsetLeft; sely+=selp.offsetTop;}} selx+=sel[i].offsetLeft; sely+=sel[i].offsetTop selw=sel[i].offsetWidth; selh=sel[i].offsetHeight if(selx+selw>x && selx<x+w && sely+selh>y && sely<y+h){ if(sel[i].style.visibility!="hidden"){sel[i].level=l; sel[i].style.visibility="hidden"; if(pm){ if(!pm.mout) pm.mout=""; pm.mout+=this.name+".sel["+i+"].style.visibility='visible';"}} }else if(l<=sel[i].level && !(pm&&l==0)) sel[i].style.visibility="visible" } }}/******************************************CM_ADD-IN - pagecheck (last updated: 08/02/02)Simple code that *tries* to keep the menus inside thebounderies of the page.Code updated. It's still not perfect (obviosly)but it will now do another check to try and place the menus inside.Just add this code to the coolmenus js fileor link the cm_addins.js file to your page.*****************************************/makeCM.prototype.onshow+=";this.pagecheck(b,pm,pm.subx,pm.suby,maxw,maxh)"makeCM.prototype.pagecheck=function(b,pm,x,y,w,h,n){ var l=pm.lev+1,a=b.align; if(!n) n=1 var ok=1 if(x<cmpage.x) {pm.align=1; ok=0;} else if(x+w>cmpage.x2){ pm.align=2; ok=0;} else if(y<cmpage.y) { pm.align=3; ok=0;} else if(h+y>cmpage.y2) {pm.align=4; ok=0;} if(!ok) this.getcoords(pm,this.l[l-1].borderX,this.l[l-1].borderY,pm.b.x,pm.b.y,w,h,this.l[l-1].offsetX,this.l[l-1].offsetY) x=pm.subx; y=pm.suby //Added check --- still not ok? --- part of the code by Denny Caldwell (thanks) -- badly immplemented by me though if(x<cmpage.x) {x += cmpage.x-x;} else if(x+w>cmpage.x2){ x = -(x+w-cmpage.x2);} else if(y<cmpage.y) { y = cmpage.y-y; } else if(h+y>cmpage.y2) {y = -(y+h-cmpage.y2);} if(x<cmpage.x) {x += cmpage.x-x;} else if(x+w>cmpage.x2){ x = -(x+w-cmpage.x2);} else if(y<cmpage.y) { y = cmpage.y-y;} else if(h+y>cmpage.y2) {y = -(y+h-cmpage.y2);} b.moveIt(x,y) }/******************************************CM_ADD-IN - pagecheck (last updated: 01/26/02)Simple code that *tries* to keep the menus inside thebounderies ofthe page.A more advanced version of this code will come later.Just add this code to the coolmenus js fileor link the cm_addins.js file to your page as well.*****************************************///makeCM.prototype.onshow+=";this.pagecheck2(b,pm,x,y,maxw,maxh)"makeCM.prototype.pagecheck2=function(b,pm,x,y,w,h){ var fixX = 0 var fixY = 0 var ok=1 if(x+w>cmpage.x2) { ; ok=0; }else if(x<cmpage.x) { ok=0; }if(y+h>cmpage.y2){ fixY = -(y+h-cmpage.y2); ok=0; }else if(y<cmpage.y) { fixY = cmpage.y-y; ok=0; }// self.status="x:"+x+" y:" +y+ " fixX:" +fixX+ " fixY:" +fixY if(!ok) { self.status = x + " - " +cmpage.x + " - " + fixX + " - " + (x+fixX) x+=fixX; y+=fixY pm.moveIt(x,y) self.status = b.css.left } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -