<style>
.tab-menu {
list-style: none;
height:80px;
}
.tab-menu li {
width:99px;
height:40px;
background-position-y:0;
text-indent: -1000px;
overflow: hidden;
display: inline-block;
float:left;
}
.tab-menu li:hover {
background-position-y: -40px;
}
.tab-menu li.select {
background-position-y: -80px;
height:80px;
}
.tab-menu li.menuitem1 {
background-image: url(./images/newbtn.bar.1.png);
}
.tab-menu li.menuitem2 {
background-image: url(./images/newbtn.bar.2.png);
}
.tab-menu li.menuitem3 {
background-image: url(./images/newbtn.bar.3.png);
}
.tab-menu li.menuitem4 {
background-image: url(./images/newbtn.bar.4.png);
}
.tab-menu li.menuitem5 {
background-image: url(./images/newbtn.bar.6.png);
}
</style>
<script>
$(document).ready(function(){
tabMenu('#tabMenu1');
});
function tabMenu(selector){
var $tabMenu = null;
var $menuItems = null;
var $selectMenuItem = null; // a주석
function init(){
$tabMenu = $(selector);
$menuItems = $tabMenu.find('li');
}
function initEvent(){
$menuItems.click(function(){
setSelectItem($(this));
});
}
function setSelectItem($item){
if($selectMenuItem){ // b 주석
$selectMenuItem.removeClass('select');
}
$selectMenuItem = $item;
$selectMenuItem.addClass('select');
}
init();
initEvent();
}
</script>
</head>
<body>
<ul class="tab-menu" id="tabMenu1">
<li class="menuitem1">google</li>
<li class="menuitem2">facebook</li>
<li class="menuitem3">pinterest</li>
<li class="menuitem4">twitter</li>
<li class="menuitem5">path</li>
</ul>
</body>
</html>
위와 같은 소스가 있습니다.
설명드리자면,,
아. style 은 위 원문에 적지 않고, 스크립트만 넣은 거라서,,설명드리자면요,,
각 텝에 mouseenter하면 탭의 배경이미지가 위로, click하면 더 위로.,,
올라가면서 각각 변하는 것입니다.
근데, 이건 밑에 스크립트와는 관련이 없는 부분입니다.
사실, 이런 탭메뉴와 관련된 것이 계속 이해가 안돼고, 내내 괴롭히고 있습니다. -.=;;
즉,
function setSelectItem($item){
if($selectMenuItem){
$selectMenuItem.removeClass('select');
}
$selectMenuItem = $item;
$selectMenuItem.addClass('select');
}
위 부분입니다. 위 소스가 작동하는 것은 css를 공부할 때 이해를 했던 것이라서
로직은 잘 이해를 합니다.
근데, $selectMenuItem <<== 이 정체가 계속 이해가 안됩니다..
위에 a, b라고 주석을 달아놓은 부분입니다.
제가 if의 조건문에 대해서 저번에 질문을 드렸는데요, 그때,,
가령 var x = null;; 이럴 경우,,
if(x){ a } <<= 이 경우에는 null은 0,,즉 false를 의미하기 때문에 a가 실행이 되지가
않는다. 라는 답변을 올려주셨습니다.
예를 들자면,
var x = 10;
if(x%2){ a } else { b } 이렇다면 b가 실행이 됩니다.. 즉, 10을 2로 나눈 나머지는
0 이니까요...
해서, 제가 이런 식으로 이해는 하는데요..
위 원소스는,,,사실 책에는 이렇게 써있습니다.
맨위에 a주석을 단 곳에
var $selectMenuItem = null;;
이렇게 한 것은 $selectMenuItem
즉, var $selectMenuItem = null; <<<== 여기서 null 이 들어갔다는 것은
$selectMenuItem라는 전역변수에 앞으로 그 어떤 클래스 인스턴트라든지,,객체가 들어갈 것이라는 것을 암시하고 있다는데요....(책에 나온 설명이 이럽니다.)
그래서, 원소스의 맨위에도
var $tabMenu = null;
var $menuItems = null;
var $selectMenuItem = null;
이렇게 나온 것입니다.
그래서, 이 경우에는 null 이라는 것이 이 원소스구문에서는 true/false를 판별하는
용도로 사용이 되지 않는 것 같습니다...
function setSelectItem($item){ //여기서 $ item은 바로 위 initEvent() 함수에서
내려온 $(this)로서 ,,5개의 li중에서 클릭된 li 를 담고 있는데요..
if($selectMenuItem){ //c주석
$selectMenuItem.removeClass('select');
}
$selectMenuItem = $item;
$selectMenuItem.addClass('select');
}
이렇게 위부분에서
그렇다면 위의 c주석을 해석하자면,
if($selectMenuItem)...이것은 무슨 의미인지,,,바로 이게 계속 이해가 안됩니다. -.=;;
즉, 맨위에 전역변수로서
var $selectMenuItem = null; 이렇게 한번 선언된 후,,
지금 처음 나옵니다...;;;
var $tabMenu = null;
var $menuItems = null;
이런 것 들은 스크립트를 쭉 내려가면서 객체를 담게 되는 것이 나오고요..-.=;;
가령,
function init(){
$tabMenu = $(selector);
$menuItems = $tabMenu.find('li');
}
위와 같은 소스에서요...
그러나,
$selectMenuItem은 아무런 객체를 담지를 않고,
function setSelectItem($item){
if($selectMenuItem){
$selectMenuItem.removeClass('select'); // d주석
}
$selectMenuItem = $item;
$selectMenuItem.addClass('select');
}
이렇게 나옵니다...
근데, d주석부분을 보면
select라는 클래스를 제거한다는 것을 것을 보니
$selectMenuItem이라는 것이 select 클래스가 있는 li를 가리킵니다....
그리고, 바로 밑에 $selectMenuItem에 클릭한 $this(즉, 클릭한 li) 를 담습니다.
그리고, 바로 밑에 그 li 에 addClass를 하게 됩니다..
이렇게는 이해를 하는데..
if($selectMenuItem)... 이걸 도무지 이해가 안되더군요...-.=;;;;
어떻게 해석이 되는지를요..
그래서,
function setSelectItem($item){
$selectMenuItem = $item; //바꾼 위치.
if($selectMenuItem){
$selectMenuItem.removeClass('select');
}
$selectMenuItem.addClass('select');
}
이렇게 위치를 바꿔봤습니다.
즉,
$selectMenuItem은 무엇인가? 이건 위 스크립트에서 내려온 $this이다..
라고 이해가 되어서요..
근데, 그렇게 해도,
if($(this)).. 이렇게 되어버리는 것인데,,,
그러면, 이것도 또 이해가 안됩니다...
여기서 $(this)는 클릭한 li를 말한다는 것은 아는데요..
if구문에 넣어서,,
if($(this))로 하면,,,이게 뭘 어쨌따는 건지....
즉,
if($selectMenuItem) 처럼 어쨌따는 건지,,,현재로선 죽어도 이해가 안돼네요...-.=;;
다른 스크립트는 이해가 되는데,,
꼭, 이렇게 탭관련해서 if($selectMenuItem) 이런 식으로 나올때마다
이해가 안됩니다...;;;
언제나, 자세한 답변을 주시려고 노력하시는 김호님께
인간적으로 감사를 드립니다...
http://devsnote.com/asks/109 에 다시 정리해서 올리신 질문과 답변을 참고하시면 되겠습니다.