2009년 11월 3일 화요일

[자바스크립트] 레이어 펼침메뉴



아래의 예제 소스를 응용하시면 제작이 가능합니다.

레이어를 보였다 안보였다 하는 방법 입니다.


▶ 소스
아래의 --------- 사이의 파란 글씨의 내용이 소스입니다..
------------------------------------------------------------

<style type="text/css">
<!--
A:link {font-family: 굴림체; font-size:9pt; text-decoration: none;}
A:visited {font-family: 굴림체; font-size:9pt; text-decoration: none;}
A:hover {font-family: 굴림체; font-size:9pt;text-decoration:overline underline;}
-->
</style>

<script language="JavaScript">
<!--
function MM_findObj(n, d) { //v3.0
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_showHideLayers() { //v3.0
var i,p,v,obj,args=MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
obj.visibility=v; }
}
//-->
</script>

<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr><td height="25">
<A href="문서1의 주소" onmouseover="MM_showHideLayers('menu1','','show','menu2','','hide')">메뉴1</A>
<A href="문서5의 주소" onmouseover="MM_showHideLayers('menu1','','hide','menu2','','show')">메뉴2</A>
</td></tr>
</table>
<div id="menu1" style="position:absolute; left:10px; top:40px; width:500px; height:7px; z-index:2; visibility: hidden">
<A href="문서1의 주소">문서1</a>
<A href="문서2의 주소">문서2</a>
<A href="문서3의 주소">문서3</a>
<A href="문서4의 주소">문서4</a>
</div>
<div id="menu2" style="position:absolute; left:45px; top:40px; width:500px; height:7px; z-index:1; visibility: hidden">
<A href="문서5의 주소">문서5</a>
<A href="문서6의 주소">문서6</a>
</div>


------------------------------------------------------------


▶ 소스 설명

1.
<style ~~> 부터 </style> 태그까지는 링크된 글씨폰트, 글씨크기, 밑줄, 윗줄 등에 대한 스타일 지정입니다.


2.
<table ~~> 부터 </table> 태그까지는 메뉴로 사용하는 레이어와 테이블을 이용한 부메뉴 부르기입니다.

참고) 레이어?
HTML 문서에서 레이어(Layer)란 화면 어디든 사용자가 나타나는 위치를 지정할 수 있는 문단을 말합니다. 레이어는 화면에서 안보이게 숨기거나 나타낼 수 있으며 크기도 지정할 수 있습니다.


3.
<script ~~> 부터 </script> 태그까지는 상위 메뉴를 눌렀을 때 상위 메뉴의 아래에 가로로 부메뉴 나타나게 하는 자바스크립트입니다.


4.
<A href="문서1" onmouseover="MM_showHideLayers('menu1','','show','menu2','','hide')">메뉴1</A>

주메뉴의 부메뉴를 부르는 명령입니다.
menu1이라는 부메뉴(<div> ~ </div> 태그로 만든 레이어의 내용들)를 보여주고(show) id가 "menu2"인 부메뉴 레이어는
감추라는(hide) 명령입니다.

주메뉴에 마우스를 올렸을 때 부메뉴로 나타내고 싶은 레이어를 MM_showHideLayers()에서 '레이어 ID','','show'처럼
지정을 하고 다른 부메뉴 레이어들은 화면에 안보이게 '레이어 ID','','hide'로 숨겨줍니다.

만약 주메뉴와 부메뉴가 각각 3개이고 각 부메뉴 레이어의 id가 menu1, menu2, menu3이라면 마우스가 주메뉴나
부메뉴 중 어느 곳에 위치해 있다가 다른 주메뉴를 선택할 때 항상 선택한 주메뉴의 부메뉴만이 화면에 나타나야 합니다.
안그러면 레이어들이 화면에 겹쳐서 잘 안보일 수 있기 때문입니다.

이런 경우에는 MM_showHideLayers()에서 '레이어 ID','','hide','레이어 ID','','hide'처럼
다른 부메뉴 레이어들은 모두 숨깁니다.(hide)

그런 후 '레이어 ID','','show'로 화면에 나타낼 부메뉴 레이어를 show를 해줍니다. show와 hide 하는 것은
어느 것을 먼저 하느냐는 상관없습니다.

예)

onmouseover="MM_showHideLayers('menu1','','show','menu2','','hide','menu3','','hide')"

이것과

onmouseover="MM_showHideLayers('menu2','','hide'.'menu3','','hide','menu1','','show')"

이것처럼 show 되는 부메뉴를 먼저 써줘두 되고 hide 되는 부메뉴를 먼저 써주든 상관 없습니다.
단, '레이어 ID', '', 'show 또는 hide' 라는 형식은 지켜야 합니다.


부메뉴는 div 태그를 이용하여 레이어로 각각 만듭니다. 레이어의 id는 주 메뉴에서 show를 한 id와 같아야 합니다.


5.
<div id="menu1" style="position:absolute; left:100px; top:30px; width:500px; height:7px; z-index:2; visibility: hidden">
<font size="2" color="white">
<A href="문서1의 주소">문서1</a> |
...........
<A href="문서4의 주소">문서4</a></font></div>


부메뉴의 내용을 레이어에 지정하는 것입니다.
id="menu1"은 이 부메뉴 레이어의 id(아이디)가 menu1이라는 것입니다. id는 부메뉴를 화면에 보여주거나(show) 숨겨줄 때(hide) 사용합니다.
style=은 부메뉴 레이어에 대한 설정을 해주는 것입니다.
  • position:absolute : 브라우저 화면의 왼쪽 위 모서리를 기준으로 레이어의 위치를 지정한다는 의미입니다.
  • left:100px : 브라우저 화면의 왼쪽에서부터 100픽셀 떨어진 위치에 레이어가 나타난다는 의미입니다.
  • top:30px : 브라우저 화면의 위쪽에서부터 30픽셀 떨어진 위치에 레이어가 나타난다는 의미입니다.
  • width:500px : 레이어의 가로 크기를 500픽셀로 지정한다는 의미입니다.
  • height:7px : 레이어의 세로 크기를 7픽셀로 지정한다는 의미입니다.
  • z-index:2 : z는 X, Y 좌표처럼 좌표에 해당하는 것으로 종이를 10장을 책상에 놓아둔다면 제일 아래쪽의 있는 종이는 z-index:1, 맨 위에 있는 종이는 z-index:10과 같다고 생각하시면 됩니다.
  • visibility: hidden : 레이어가 화면에 나타나지 않게 하라는 의미입니다. 레이어가 화면에 나타나면 자동으로 visibility: visible 가 됩니다.
    위의 style의 left와 top의 위치를 조정해서 부메뉴가 나타나는 위치는 조절할 수 있구요.

    메뉴를 추가할 때에는 주메뉴 먼저 추가로 만들어 주고 부메뉴 레이어 중 하나를 복사한 후 id를 고쳐주고 위치도 조절하고 하면 됩니다.

    다른 주메뉴를 선택했을 때 나머지 주메뉴들에 딸린 부메뉴 레이어들은 모두 숨겨지도록 hide 시켜주는 것 잊지 말구요..

    부메뉴가 없는 주메뉴가 필요하다면 show 시켜줄 부메뉴 레이어가 없으니 MM_showHideLayers()에서 '레이어 ID', '', 'hide'만 써주면 되겠죠.

    부메뉴 레이어도 따로 만들 필요도 없구요.
  • 댓글 없음:

    댓글 쓰기