NARADESIGN:BLOG :WIKI

웹표준, 웹접근성, 유니버설디자인, HTML, CSS, UI, UX, UD


jQuery 입문: 네비게이션 만들기.

본문 건너 뛰기

오늘은 jQuery를 이용해서 네비게이션(div>ul>li>ul>li) 만들기를 해볼까 합니다. 수직 형태의 네비게이션과 수평 형태의 네비게이션 동작이 약간 달라서 예제를 두 개 준비 했습니다. 예제의 마크업은 같지만 수직, 수평 네비게이션을 구분하기 위해 클래스 이름을 다르게 지정하고 각각 다른 동작을 입혔습니다. CSS를 사용해서 수직 수평 모양을 지정할 수 있지만 적용하지 않았습니다.

수직 네비게이션 만들기

수직 네비게이션의 요구 조건은 다음과 같습니다.

  • 큰 메뉴를 클릭하면 
    • 열려있는 서브 메뉴가 모두 닫히고
    • 클릭한 메뉴의 하위 메뉴가 열리며
    • 클릭한 메뉴의 글꼴이 굵어진다 
  • 포커스가 맺히면 클릭한 것처럼 동작한다

수직 네비게이션 예제


수직 네비게이션 HTML

<div class="gnbVr">
	<ul>
		<li><a href="#">#1</a>
			<ul>
				<li><a href="#">#1-1</a></li>
				<li><a href="#">#1-2</a></li>
			</ul>
		</li>
		<li><a href="#">#2</a>
			<ul>
				<li><a href="#">#2-1</a></li>
				<li><a href="#">#2-2</a></li>
			</ul>
		</li>
		<li><a href="#">#3</a>
			<ul>
				<li><a href="#">#3-1</a></li>
				<li><a href="#">#3-2</a></li>
			</ul>
		</li>
	</ul>
</div>

수직 네비게이션 JS

<script type="text/javascript">
$(function(){
	var gnbVr = $('.gnbVr');
	gnbVr.find('>ul>li>ul').hide();
	gnbVr.find('>ul>li>a[href=#]')
		.click(function(){
			gnbVr
				.find('>ul>li>ul:visible')
				.slideUp(200)
				.parent('li')
				.removeClass('active')
				.find('>a')
				.css('fontWeight','');
			$(this)
				.next('ul:hidden')
				.slideDown(200)
				.parent('li')
				.addClass('active')
				.find('>a')
				.css('fontWeight','bold');
			return false;
		})
		.focus(function(){
			$(this).click();
		});
});
</script>

수평 네비게이션 만들기

수평 네비게이션의 요구 조건은 다음과 같습니다.

  • 큰 메뉴를 마우스 오버 하면 
    • 열려있는 서브 메뉴가 모두 닫히고
    • 마우스 오버 메뉴의 하위 메뉴가 열리며
    • 마우스 오버 메뉴의 글꼴이 굵어진다
  • 포커스가 맺히면 마우스 오버한 것처럼 동작한다
  • 메뉴 영역에서 마우스가 떠나면
    • 서브 메뉴가 모두 닫히고
    • 굵은 글꼴을 제거한다

수평 네비게이션 예제


수평 네비게이션 HTML

<div class="gnbHr">
	<ul>
		<li><a href="#">#1</a>
			<ul>
				<li><a href="#">#1-1</a></li>
				<li><a href="#">#1-2</a></li>
			</ul>
		</li>
		<li><a href="#">#2</a>
			<ul>
				<li><a href="#">#2-1</a></li>
				<li><a href="#">#2-2</a></li>
			</ul>
		</li>
		<li><a href="#">#3</a>
			<ul>
				<li><a href="#">#3-1</a></li>
				<li><a href="#">#3-2</a></li>
			</ul>
		</li>
	</ul>
</div>

수평 네비게이션 JS

<script type="text/javascript">
$(function(){
	var gnbHr = $('.gnbHr');
	gnbHr.find('>ul>li>ul').hide();
	gnbHr.find('>ul>li>a')
		.mouseover(function(){
			gnbHr
				.find('>ul>li>ul:visible')
				.slideUp(200)
				.parent('li')
				.removeClass('active')
				.find('>a')
				.css('fontWeight','');
			$(this)
				.next('ul:hidden')
				.slideDown(200)
				.parent('li')
				.addClass('active')
				.find('>a')
				.css('fontWeight','bold');
		})
		.focus(function(){
			$(this).mouseover();
		})
		.end()
		.mouseleave(function(){
			gnbHr
				.find('>ul>li>ul')
				.slideUp(200)
				.prev('a')
				.css('fontWeight','');
		});
});
</script>

오늘은 자세한 설명을 생략하겠습니다. 코드가 너무 길죠? 이렇게 메소드 체이닝이 길어지면 메소드 기준으로 줄을 바꿈으로써 코드 가독성을 높일 수 있습니다.

분류: 자바스크립트 | 2011년 7월 2일, 3:48 | 정찬명 | 댓글: 18개 |
트랙백URI - http://naradesign.net/wp/2011/07/02/1634/trackback/