| 
     
 
<html> 
<h1>Simple drop-down menu example</h1> 
 
<!-- 
Example for KLayers project 
http://www.kruglov.ru/klayers/ 
 
(c) Kruglov S.A. 2002 
--> 
 
<!-- klayers.js --> 
<script> 
/************************************************\ 
| KLayers 2.97                                   | 
| DHTML Library for Internet Explorer 4.* - 6.*, | 
| Netscape 4.* - 7.*, Mozilla, Opera 5.* - 7.*   | 
| Copyright by Kruglov S. A. (kruglov.ru) 2003   | 
\************************************************/ 
 
/***  See for description and latest version  ***\ 
\***  http://www.kruglov.ru/klayers/          ***/ 
 
function initKLayers(){ 
  isDOM=document.getElementById?true:false 
  isOpera=isOpera5=window.opera && isDOM 
  isOpera6=isOpera && window.print 
  isOpera7=isOpera && document.readyState 
  isMSIE=isIE=document.all && document.all.item && !isOpera 
  isStrict=document.compatMode=='CSS1Compat' 
  isNN=isNC=navigator.appName=="Netscape" 
  isNN4=isNC4=isNN && !isDOM 
  isMozilla=isNN6=isNN && isDOM 
 
  if(!isDOM && !isNC && !isMSIE && !isOpera){ 
    KLayers=false 
    return false 
  } 
 
  pageLeft=0 
  pageTop=0 
 
  KL_imgCount=0 
  KL_imgArray=new Array() 
 
  KL_imageRef="document.images[\"" 
  KL_imagePostfix="\"]" 
  KL_styleSwitch=".style" 
  KL_layerPostfix="\"]" 
 
  if(isNN4){ 
    KL_layerRef="document.layers[\"" 
    KL_styleSwitch="" 
  } 
 
  if(isMSIE){ 
    KL_layerRef="document.all[\"" 
  } 
 
  if(isDOM){ 
    KL_layerRef="document.getElementById(\"" 
    KL_layerPostfix="\")" 
  } 
 
  KLayers=true 
  return true 
} 
 
initKLayers() 
 
// document and window functions: 
 
function KL_getBody(w){ 
  if(!w) w=window 
  if(isStrict){ 
    return w.document.documentElement 
  }else{ 
    return w.document.body 
  } 
} 
 
function getWindowLeft(w){ 
  if(!w) w=window 
  if(isMSIE || isOpera7) return w.screenLeft 
  if(isNN || isOpera) return w.screenX 
} 
 
function getWindowTop(w){ 
  if(!w) w=window 
  if(isMSIE || isOpera7) return w.screenTop 
  if(isNN || isOpera) return w.screenY 
} 
 
function getWindowWidth(w){ 
  if(!w) w=window 
  if(isMSIE) return KL_getBody(w).clientWidth 
  if(isNN || isOpera) return w.innerWidth 
} 
 
function getWindowHeight(w){ 
  if(!w) w=window 
  if(isMSIE) return KL_getBody(w).clientHeight 
  if(isNN || isOpera) return w.innerHeight 
} 
 
function getDocumentWidth(w){ 
  if(!w) w=window 
  if(isMSIE || isOpera7) return KL_getBody(w).scrollWidth 
  if(isNN) return w.document.width 
  if(isOpera) return w.document.body.style.pixelWidth 
} 
 
function getDocumentHeight(w){ 
  if(!w) w=window 
  if(isMSIE || isOpera7) return KL_getBody(w).scrollHeight 
  if(isNN) return w.document.height 
  if(isOpera) return w.document.body.style.pixelHeight 
} 
 
function getScrollX(w){ 
  if(!w) w=window 
  if(isMSIE || isOpera7) return KL_getBody(w).scrollLeft 
  if(isNN || isOpera) return w.pageXOffset 
} 
 
function getScrollY(w){ 
  if(!w) w=window 
  if(isMSIE || isOpera7) return KL_getBody(w).scrollTop 
  if(isNN || isOpera) return w.pageYOffset 
} 
 
function preloadImage(imageFile){ 
  KL_imgArray[KL_imgCount]=new Image() 
  KL_imgArray[KL_imgCount++].src=imageFile 
} 
 
var KL_LAYER=0 
var KL_IMAGE=1 
 
function KL_findObject(what,where,type){ 
  var i,j,l,s 
  var len=eval(where+".length") 
  for(j=0;j<len;j++){ 
    s=where+"["+j+"].document.layers" 
    if(type==KL_LAYER){ 
      l=s+"[\""+what+"\"]" 
    } 
    if(type==KL_IMAGE){ 
      i=where+"["+j+"].document.images" 
      l=i+"[\""+what+"\"]" 
    } 
    if(eval(l)) return l 
    l=KL_findObject(what,s,type) 
    if(l!="null") return l 
  } 
  return "null" 
} 
 
function KL_getObjectPath(name,parent,type){ 
  var l=((parent && isNN4)?(parent+"."):(""))+((type==KL_LAYER)?KL_layerRef:KL_imageRef)+name+((type==KL_LAYER)?KL_layerPostfix:KL_imagePostfix) 
  if(eval(l))return l 
  if(!isNN4){ 
    return l 
  }else{ 
    return KL_findObject(name,"document.layers",type) 
  } 
} 
 
function layer(name){ 
  return new KLayer(name,null) 
} 
 
function layerFrom(name,parent){ 
  if(parent.indexOf("document.")<0) parent=layer(parent).path 
  return new KLayer(name,parent) 
} 
 
function image(name){ 
  return new KImage(name,null) 
} 
 
function imageFrom(name,parent){ 
  if(parent.indexOf("document.")<0) parent=layer(parent).path 
  return new KImage(name,parent) 
} 
 
// class "KLayer": 
 
function KLayer(name,parent){ 
  this.path=KL_getObjectPath(name,parent,KL_LAYER) 
  this.object=eval(this.path) 
  if(!this.object)return 
  this.style=this.css=eval(this.path+KL_styleSwitch) 
} 
 
KLP=KLayer.prototype 
 
KLP.isExist=KLP.exists=function(){ 
  return (this.object)?true:false 
} 
 
function KL_getPageOffset(o){  
  var KL_left=0 
  var KL_top=0 
  do{ 
    KL_left+=o.offsetLeft 
    KL_top+=o.offsetTop 
  }while(o=o.offsetParent) 
  return [KL_left, KL_top] 
} 
 
KLP.getLeft=function(){ 
  var o=this.object 
  if(isMSIE || isMozilla || isOpera) return o.offsetLeft-pageLeft 
  if(isNN4) return o.x-pageLeft 
} 
 
KLP.getTop=function(){ 
  var o=this.object 
  if(isMSIE || isMozilla || isOpera) return o.offsetTop-pageTop 
  if(isNN4) return o.y-pageTop 
} 
 
KLP.getAbsoluteLeft=function(){ 
  var o=this.object 
  if(isMSIE || isMozilla || isOpera) return KL_getPageOffset(o)[0]-pageLeft 
  if(isNN4) return o.pageX-pageLeft 
} 
 
KLP.getAbsoluteTop=function(){ 
  var o=this.object 
  if(isMSIE || isMozilla || isOpera) return KL_getPageOffset(o)[1]-pageTop 
  if(isNN4) return o.pageY-pageTop 
} 
 
KLP.getWidth=function(){ 
  var o=this.object 
  if(isMSIE || isMozilla || isOpera7) return o.offsetWidth 
  if(isOpera) return this.css.pixelWidth 
  if(isNN4) return o.document.width 
} 
 
KLP.getHeight=function(){ 
  var o=this.object 
  if(isMSIE || isMozilla || isOpera7) return o.offsetHeight 
  if(isOpera) return this.css.pixelHeight 
  if(isNN4) return o.document.height 
} 
 
KLP.getZIndex=function(){ //deprecated 
  return this.css.zIndex 
} 
 
KLP.setLeft=KLP.moveX=function(x){ 
  x+=pageLeft 
  if(isOpera){ 
    this.css.pixelLeft=x 
  }else if(isNN4){ 
    this.object.x=x 
  }else{ 
    this.css.left=x+"px" 
  } 
} 
 
KLP.setTop=KLP.moveY=function(y){ 
  y+=pageTop 
  if(isOpera){ 
    this.css.pixelTop=y 
  }else if(isNN4){ 
    this.object.y=y 
  }else{ 
    this.css.top=y+"px" 
  } 
} 
 
KLP.moveTo=KLP.move=function(x,y){ 
  this.setLeft(x) 
  this.setTop(y) 
} 
 
KLP.moveBy=function(x,y){ 
  this.moveTo(this.getLeft()+x,this.getTop()+y) 
} 
 
KLP.setZIndex=KLP.moveZ=function(z){ //deprecated 
  this.css.zIndex=z 
} 
 
KLP.setVisibility=function(v){ 
  this.css.visibility=(v)?(isNN4?"show":"visible"):(isNN4?"hide":"hidden") 
} 
 
KLP.show=function(){ 
  this.setVisibility(true) 
} 
 
KLP.hide=function(){ 
  this.setVisibility(false) 
} 
 
KLP.isVisible=KLP.getVisibility=function(){ 
  return (this.css.visibility.toLowerCase().charAt(0)=='h')?false:true 
} 
 
KLP.setBgColor=function(c){ 
  if(isMSIE || isMozilla || isOpera7){ 
    this.css.backgroundColor=c 
  }else if(isOpera){ 
    this.css.background=c 
  }else if(isNN4){ 
    this.css.bgColor=c 
  } 
} 
 
KLP.setBgImage=function(url){ 
  if(isMSIE || isMozilla || isOpera6){ 
    this.css.backgroundImage="url("+url+")" 
  }else if(isNN4){ 
    this.css.background.src=url 
  } 
} 
 
KLP.setClip=KLP.clip=function(top,right,bottom,left){ 
  if(isMSIE || isMozilla || isOpera7){ 
    this.css.clip="rect("+top+"px "+right+"px "+bottom+"px "+left+"px)" 
  }else if(isNN4){ 
    var c=this.css.clip 
    c.top=top 
    c.right=right 
    c.bottom=bottom 
    c.left=left 
  } 
} 
 
KLP.scrollTo=KLP.scroll=function(windowLeft,windowTop,windowWidth,windowHeight,scrollX,scrollY){ 
  if(scrollX>this.getWidth()-windowWidth) scrollX=this.getWidth()-windowWidth 
  if(scrollY>this.getHeight()-windowHeight) scrollY=this.getHeight()-windowHeight 
  if(scrollX<0)scrollX=0 
  if(scrollY<0)scrollY=0 
  var top=0 
  var right=windowWidth 
  var bottom=windowHeight 
  var left=0 
  left=left+scrollX 
  right=right+scrollX 
  top=top+scrollY 
  bottom=bottom+scrollY 
  this.moveTo(windowLeft-scrollX,windowTop-scrollY) 
  this.setClip(top,right,bottom,left) 
} 
 
KLP.scrollBy=KLP.scrollByOffset=function(windowLeft,windowTop,windowWidth,windowHeight,scrollX,scrollY){ 
  var X=-parseInt(this.css.left)+windowLeft+scrollX 
  var Y=-parseInt(this.css.top)+windowTop+scrollY 
  this.scroll(windowLeft,windowTop,windowWidth,windowHeight,X,Y) 
} 
 
KLP.scrollByPercentage=function(windowLeft,windowTop,windowWidth,windowHeight,scrollX,scrollY){ 
  var X=(this.getWidth()-windowWidth)*scrollX/100 
  var Y=(this.getHeight()-windowHeight)*scrollY/100 
  this.scroll(windowLeft,windowTop,windowWidth,windowHeight,X,Y) 
} 
 
KLP.write=function(str){ 
  var o=this.object 
  if(isNN4){ 
    var d=o.document 
    d.open() 
    d.write(str) 
    d.close() 
  }else{ 
    o.innerHTML=str 
  } 
} 
 
KLP.add=function(str){ 
  var o=this.object 
  if(isNN4){ 
    o.document.write(str) 
  }else{ 
    o.innerHTML+=str 
  } 
} 
 
// class "KImage": 
 
KIP=KImage.prototype 
 
function KImage(name){ 
  this.path=KL_getObjectPath(name,false,KL_IMAGE) 
  this.object=eval(this.path) 
} 
 
KIP.isExist=KIP.exists=function(){ 
  return (this.object)?true:false 
} 
 
KIP.getSrc=KIP.src=function(){ 
  return this.object.src 
} 
 
KIP.setSrc=KIP.load=function(url){ 
  this.object.src=url 
} 
</script> 
 
<script> 
 
function cancelCloseMenu(){ 
  if(self.tm) clearTimeout(tm) // cancel delayed closing 
} 
 
function showMenu(){ 
  if(!self.menu || !self.submenu){ 
    menu=layer("menulayer") 
    submenu=layer("submenulayer") 
  } 
 
  cancelCloseMenu() 
 
  submenu.moveTo(menu.getAbsoluteLeft(), menu.getAbsoluteTop() + menu.getHeight()) // move second menu relatively 
  submenu.show() 
} 
 
function initiateHideMenu(){ 
  tm=setTimeout("hideMenu()",1000) // 1 second delay to close a submenu 
} 
 
function hideMenu(){ 
  submenu.hide() 
} 
 
</script> 
 
 
Move mouse to this word: <span id="menulayer" style="position: relative; background-color: yellow"><a href="#" onmouseover="showMenu(); return true" onmouseout="initiateHideMenu(); return true">MENU</a></span> to open a menu. 
 
<div id="submenulayer" style="position: absolute; visibility: hidden; background-color: #00ff00"> 
<a href="#" onmouseover="cancelCloseMenu(); return true" onmouseout="initiateHideMenu(); return true">item1</a><br> 
<a href="#" onmouseover="cancelCloseMenu(); return true" onmouseout="initiateHideMenu(); return true">item2</a></div> 
 
 
 
 
</html>  
 
            
        
    
    |