메뉴 건너뛰기

조회 수 8198 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

jQuery를 시작한지 얼마 되지 않아 jQuery함수를 잘 몰라 이래저래 혼용하여 만들어 보았습니다.
근래에 웹 접근성 작업을 하면서 메뉴 스크립트 요청이 잦아서 내친김에 많이 쓰일 수 있을만한 패턴을 올려봅니다.
필요하신 분 퍼다 쓰세요 ㅎㅎ

스크립트명 : GNB, LNB Initialize
HTML구조 : ul – li – ul – li 로 이루어진 2단계 메뉴
이벤트 : mouseover, onfocus

이 스크립트는 언제 쓰죠?
1. 이미지 메뉴가 아닌 올 텍스트 메뉴.
2. GNB는 2뎁스까지 있고, LNB는 1뎁스까지 있는경우. (만약 LNB가 2뎁스까지 있는 경우엔 GNB쪽 펑션과 이벤트리스너를 복사하여 변경하여 사용하세요.)

HTML 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ul id="gnb">
<li><a href="#">GNB A</a>
<ul>
<li><a href="#">GNB A-1</a></li>
<li><a href="#">GNB A-2</a></li>
</ul>
</li>
</ul>
<ul id="lnb">
<li><a href="#">SNB A</a>
<ul>
<li><a href="#">SNB A-1</a></li>
<li><a href="#">SNB A-2</a></li>
</ul>
</li>
</ul>

선언할 변수

헤드에 선언하면 됩니다. GNB, LNB번호를 넣어주어 현재 메뉴 위치를 나타냅니다. 번호는 0번이 아닌 1번부터 시작합니다.

1
2
3
var gnbDep1 = 1; //GNB depth 1
var gnbDep2 = 2; //GNB depth 2
var lnbDep1 = 1; //LNB depth 1

스크립트 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
    함수명 : GNB, LNB Initialize
    작성자 : 장호연(http://eventjang.com)
    코멘트 - UL - LI 구조의 트리구조 메뉴 스크립트.
            - <img>의 src 변경없이 <li>의 클래스 변경만을 필요로 하는 유형에 사용함.
            - mouseover 와 onfocus 이벤트를 처리.
            - 활성화시 클래스는 'active'
*/
jQuery(document).ready(function(){
 
    //초기화 실행
    gnbInit(gnbDep1, gnbDep2);
    lnbInit(lnbDep1);
 
    //마우스커서와 포커스가 메뉴 영역을 벗어났을때 GNB 초기화
    $("#sub, #container, #footer").mouseover(function(){
        gnbInit(gnbDep1, gnbDep2);
    }).focusin(function(){
        $(this).mouseover();
    });
 
    //마우스커서와 포커스가 메뉴 영역을 벗어났을때 LNB 초기화
    $("#header, #contents, #footer").mouseover(function(){
        lnbInit(lnbDep1);
    }).focusin(function(){
        $(this).mouseover();
    });
 
    //GNB mouseover, onfocus 이벤트 처리
    $("#gnb > li > a").mouseover(function(){
        var cnt = gnbDep1;
 
        for(var i=0; i<$("#gnb > li").size(); i++){
            if($("#gnb > li:eq("+ i +")")[0] == $(this).parent()[0]){
                cnt = i+1;
            }
        }
        if(cnt == gnbDep1){
            gnbInit(cnt, gnbDep2);
        } else {
            gnbInit(cnt, "");
        }
    }).focusin(function(){
        $(this).mouseover();
    });
 
    //SNB mouseover, onfocus 이벤트 처리
    $("#lnb > li > a").mouseover(function(){
        var cnt = lnbDep1;
 
        for(var i=0; i<$("#lnb > li").size(); i++){
            if($("#snb > li:eq("+ i +")")[0] == $(this).parent()[0]){
                cnt = i+1;
            }
        }
        lnbInit(cnt);
 
    }).focusin(function(){
        jQuery(this).mouseover();
    });
 
    //선택한 SNB를 active(활성화) 시킨다.
    function gnbInit(dep1, dep2){
        $("#gnb > li > ul").hide();
        $("#gnb > li:eq("+(dep1-1)+") > ul").show();
        $("#gnb > li").removeClass("active");
        $("#gnb > li:eq("+(dep1-1)+")").addClass("active");
        $("#gnb > li > ul > li").removeClass("active");
        if(dep2 != ""){
            $("#gnb > li:eq("+(dep1-1)+") > ul > li:eq("+(dep2-1)+")").addClass("active");
        }
    }
 
    //선택한 LNB를 active(활성화) 시킨다.
    function lnbInit(dep1){
        $("#snb > li").removeClass("active");
        $("#snb > li:eq("+(dep1-1)+")").addClass("active");
    }
 
});
</li>

 


List of Articles
번호 제목 날짜 조회 수
167 새로고침(F5) 금지 2018.03.28 6001
166 날짜 및 시간 입력 구현하기, Bootstrap DateTimePicker file 2017.04.06 16530
165 [INPUT BOX] 텍스트박스(INPUT 박스) 가 동적으로 추가,삭제됩니다 2017.02.19 8521
164 팝업창 가운데 띄우기 2016.12.23 6705
163 셀렉트(select) change href 이벤트 2016.12.23 5899
162 셀렉트(select) change Ajax 이벤트 2016.12.23 12569
161 셀렉트(select) change 이벤트 (split) 2016.12.23 6009
160 이전, 위로 이동 2016.12.23 5740
159 우클릭 금지 2016.12.23 5701
158 setTimeout() / clearTimeout() / setInterval() 2016.12.22 8162
157 [단축키 설정 자바스크립트]shortcut.js 2016.12.22 8373
156 자바스크립트 모음 2016.12.22 5778
155 자바스크립트 및 CSS를 이용한 숫자만 입력받기 2016.12.22 6321
154 자바스크립트 실행 시간 측정 2016.12.22 8930
153 자바스크립트 변수,함수,객체의 표현 2016.12.22 5369
152 response.setHeader 2016.12.22 7355
151 복사방지+드래그금지+마우스우클릭 금지 2016.12.22 7909
150 GET방식으로 전송시 특수문자함께 전송하는 방법 2016.12.22 12338
149 setTimeout 대체 스크립트 함수 (일시멈춤) 2016.12.22 6241
148 도메인 체크 2016.12.22 5928
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved