웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
슬라이딩 메뉴 자바스크립트
2004.09.21 13:03
슬라이딩 메뉴를 구현해주는 자바스크립트입니다.
소스와 대충의 사용법은 아래에 남기지만, 실제 작동하는 예제를 보고싶다거나 제 홈페이지가 궁금해서 못견딜 것 같은 분(...이 있을리가!)은 링크에 오셔서 봐도 됩니다.
... 이 정도 홈페이지 광고는 봐주시는 거죠?
서브메뉴를 DIV 로 둘러싸는데 서브메뉴의 크기를 자동으로 인식해서 슬라이딩 애니메이션을 구현합니다.
브라우저는 오페라, 모질라(동급의 불여우 포함), 오페라에서 다 작동합니다. 제가 리눅스 데스크탑은 아직 사용하지 않는 이유로 리눅스 계열의 브라우저에선 테스트해보지 않았습니다. 아래에 적힌 것 이외의 버전이나 OS, 브라우저 등에서 확인해보신 분은 알려주시면 내용을 업데이트 하도록 하겠습니다.
그냥 사용하셔도 되지만, 불편하지 않으시다면 제 이름하고 사이트 주소만이라도 주석에 달아놓으시면 고맙겠습니다.
홈페이지 : http://mygony.com
예제 링크 : http://mygony.com/tt/index.php?pl=70&nc=1
--------------------
소스코드
--------------------
function slide(Id, interval, to)
{
var obj = document.getElementById(Id);
var H, step = 5;
if (obj == null) return;
if (to == undefined) { // user clicking
if (obj._slideStart == true) return;
if (obj._expand == true) {
to = 0;
obj.style.overflow = "hidden";
} else {
slide.addId(Id);
for(var i=0; i < slide.objects.length; i++) {
if (slide.objects[i].id != Id && slide.objects[i]._expand == true) {
slide(slide.objects[i].id);
}
}
obj.style.height = "";
obj.style.overflow = "";
obj.style.display = "block";
to = obj.offsetHeight;
obj.style.overflow = "hidden";
obj.style.height = "1px";
}
obj._slideStart = true;
}
step = ((to > 0) ? 1:-1) * step;
interval = ((interval==undefined)?1:interval);
obj.style.height = (H=((H=(isNaN(H=parseInt(obj.style.height))?0:H))+step<0)?0:H+step)+"px";
if (H <= 0) {
obj.style.display = "none";
obj.style.overflow = "hidden";
obj._expand = false;
obj._slideStart = false;
} else if (to > 0 && H >= to) {
obj.style.display = "block";
obj.style.overflow = "visible";
obj.style.height = H + "px";
obj._expand = true;
obj._slideStart = false;
} else {
setTimeout("slide('"+Id+"' , "+interval+", "+to+");", interval);
}
}
slide.objects = new Array();
slide.addId = function(Id)
{
for (var i=0; i < slide.objects.length; i++) {
if (slide.objects[i].id == Id) return true;
}
slide.objects[slide.objects.length] = document.getElementById(Id);
}
--------------------
사용예제 코드
--------------------
<style>
BODY { font-size:9pt; }
.menu {
border:1px solid #CCCCCC;
background-color:#DEDEDE;
padding:3px 1px 1px 5px;
width:150px;
}
.submenu {
width:150px;
padding-left:10px;
display:none;
}
</style>
<div class="menu" onClick="slide('sub1'+ ');">Tree1</div>
<div id="sub1" class="submenu">
<div> + SubTree1-1</div>
<div> + SubTree1-2</div>
<div> + SubTree1-3</div>
<div> + SubTree1-4</div>
<div> + SubTree1-5</div>
</div>
<div class="menu" onClick="slide('sub2');">Tree2</div>
<div id="sub2" class="submenu">
<div> + SubTree2-1</div>
<div> + SubTree2-2</div>
<div> + SubTree2-3</div>
<div> + SubTree2-4</div>
</div>
<div class="menu" onClick="slide('sub3');">Tree3</div>
<div id="sub3" class="submenu">
<div> + SubTree3-1</div>
<div> + SubTree3-2</div>
<div> + SubTree3-3</div>
</div>
<div class="menu">이건 다른 메뉴</div>
--------------------
테스트 해본 브라우저
--------------------
Internet Explorer 6.0 SP1
Mozilla 1.7.2 (windows)
Opera 7.54 (windows)
소스와 대충의 사용법은 아래에 남기지만, 실제 작동하는 예제를 보고싶다거나 제 홈페이지가 궁금해서 못견딜 것 같은 분(...이 있을리가!)은 링크에 오셔서 봐도 됩니다.
... 이 정도 홈페이지 광고는 봐주시는 거죠?
서브메뉴를 DIV 로 둘러싸는데 서브메뉴의 크기를 자동으로 인식해서 슬라이딩 애니메이션을 구현합니다.
브라우저는 오페라, 모질라(동급의 불여우 포함), 오페라에서 다 작동합니다. 제가 리눅스 데스크탑은 아직 사용하지 않는 이유로 리눅스 계열의 브라우저에선 테스트해보지 않았습니다. 아래에 적힌 것 이외의 버전이나 OS, 브라우저 등에서 확인해보신 분은 알려주시면 내용을 업데이트 하도록 하겠습니다.
그냥 사용하셔도 되지만, 불편하지 않으시다면 제 이름하고 사이트 주소만이라도 주석에 달아놓으시면 고맙겠습니다.
홈페이지 : http://mygony.com
예제 링크 : http://mygony.com/tt/index.php?pl=70&nc=1
--------------------
소스코드
--------------------
function slide(Id, interval, to)
{
var obj = document.getElementById(Id);
var H, step = 5;
if (obj == null) return;
if (to == undefined) { // user clicking
if (obj._slideStart == true) return;
if (obj._expand == true) {
to = 0;
obj.style.overflow = "hidden";
} else {
slide.addId(Id);
for(var i=0; i < slide.objects.length; i++) {
if (slide.objects[i].id != Id && slide.objects[i]._expand == true) {
slide(slide.objects[i].id);
}
}
obj.style.height = "";
obj.style.overflow = "";
obj.style.display = "block";
to = obj.offsetHeight;
obj.style.overflow = "hidden";
obj.style.height = "1px";
}
obj._slideStart = true;
}
step = ((to > 0) ? 1:-1) * step;
interval = ((interval==undefined)?1:interval);
obj.style.height = (H=((H=(isNaN(H=parseInt(obj.style.height))?0:H))+step<0)?0:H+step)+"px";
if (H <= 0) {
obj.style.display = "none";
obj.style.overflow = "hidden";
obj._expand = false;
obj._slideStart = false;
} else if (to > 0 && H >= to) {
obj.style.display = "block";
obj.style.overflow = "visible";
obj.style.height = H + "px";
obj._expand = true;
obj._slideStart = false;
} else {
setTimeout("slide('"+Id+"' , "+interval+", "+to+");", interval);
}
}
slide.objects = new Array();
slide.addId = function(Id)
{
for (var i=0; i < slide.objects.length; i++) {
if (slide.objects[i].id == Id) return true;
}
slide.objects[slide.objects.length] = document.getElementById(Id);
}
--------------------
사용예제 코드
--------------------
<style>
BODY { font-size:9pt; }
.menu {
border:1px solid #CCCCCC;
background-color:#DEDEDE;
padding:3px 1px 1px 5px;
width:150px;
}
.submenu {
width:150px;
padding-left:10px;
display:none;
}
</style>
<div class="menu" onClick="slide('sub1'+ ');">Tree1</div>
<div id="sub1" class="submenu">
<div> + SubTree1-1</div>
<div> + SubTree1-2</div>
<div> + SubTree1-3</div>
<div> + SubTree1-4</div>
<div> + SubTree1-5</div>
</div>
<div class="menu" onClick="slide('sub2');">Tree2</div>
<div id="sub2" class="submenu">
<div> + SubTree2-1</div>
<div> + SubTree2-2</div>
<div> + SubTree2-3</div>
<div> + SubTree2-4</div>
</div>
<div class="menu" onClick="slide('sub3');">Tree3</div>
<div id="sub3" class="submenu">
<div> + SubTree3-1</div>
<div> + SubTree3-2</div>
<div> + SubTree3-3</div>
</div>
<div class="menu">이건 다른 메뉴</div>
--------------------
테스트 해본 브라우저
--------------------
Internet Explorer 6.0 SP1
Mozilla 1.7.2 (windows)
Opera 7.54 (windows)
댓글 3
-
†천상의燦†
2004.09.21 23:26
^^ 좋은 자료 감사합니다. -
Change...
2004.09.23 20:07
깔끔하네요...^^ 추천 -
네츠키
2005.02.16 12:27
아..근데 tree1에 마우스가 올라갔을때 링크가 된것 처럼 손모양이 나오게 할 수는 없을까요?
제목 | 글쓴이 | 날짜 |
---|---|---|
웹페이지에서 단축키 사용 (Firefox) [2] | 전종화 | 2004.10.07 |
멀티 파일다운로드 꽁수로 구현하기 [1] | 행복한고니 | 2004.10.07 |
슬라이딩 메뉴 자바스크립트 [3] | 행복한고니 | 2004.09.21 |
메뉴 추가 삭제 수정시 쓰면 좋을것 같네요 - 출처: http://www.happyscript.com/ [1] | 예뜨락 | 2004.09.17 |
내홈피 즐겨찾기/새로고침/앞/뒤로가기 [4] | 팡이 | 2004.09.13 |
요일마다 바뀌는 상태바 인사 말~ [2] | Kasis | 2004.09.13 |
셀렉트 메뉴를 통해 갤러리 만들기 | 한현종 | 2004.09.10 |
랜디님의 iframe 크기조절 소스응용-iframe 최저길이 지정하기 [1] | 김수형 | 2004.09.10 |
싸이처럼 테이블 안에서 버튼으로 이동/스크롤 하기 [5] | 제로스 | 2004.09.09 |
이미지 사이즈에 맞게 새창띄우기 [오류보완] 정확하게 안열리는 오류 [11] | beMax | 2004.08.18 |
레이어를 클릭해서 보이거나 사라지게 하기 [3] | †천상의燦† | 2004.08.18 |
Javascipt로 구현한 MD5,MD4,SHA1 [10] | 장종석 | 2004.08.06 |
원하는 아이프레임부분을 리로드하자! [1] | †천상의燦† | 2004.08.02 |
문서에 따른 아이프레임 heigh(높이) 값 자동 조절 (수정본) [3] | 스토비━ⓒ | 2004.07.31 |
아이프레임으로 문서크기 자동조절하기(완벽판) [13] | 렌디 | 2004.07.21 |
웹 문서 암호화 스크립트 [1] | 미친개 | 2004.07.20 |
레이어 5 - 뽀나수 둘 [6] | 미친개 | 2004.07.07 |
레이어 4 - 뽀나수 하나 [1] | 미친개 | 2004.07.07 |
레이어 3 - 메뉴판때기. [1] | 미친개 | 2004.07.04 |
레이어 2 - 뷁뷁뷁뷁뷁봵 [7] | 미친개 | 2004.07.04 |