Day74 -[js]동적 기능을 하는 메뉴만들기

2021. 6. 1. 20:39Java Script

이번에는 java script를 이용해서 동적 기능을 하는 메뉴를 만들어 봅시다

 

위 처럼, 버튼을 가지고 있고 웹 에서 실행했을 때 메뉴가 열려 있는 상태로 실행이 되고, 버튼을 한번 더 누르면 메뉴가 닫히도록 만들 었고,

 

모바일 환경에서 할 경우에 반대로, 버튼이 있고, 한번 더 누르면 메뉴가 열리도록 구현을 했습니다

 

메뉴의 배경색이나 글씨색, padding 등이 필요하기 때문에 css 를 간단하게 만들었습니다.

* {margin: 0; padding: 0; list-style: none;}

.sidenav {
    position:fixed;
    left: 0;
    top: 50px;
    width: 200px;
    height: 100%;
    background-color: #263238;
    z-index: 30;
    padding-top: 50px;

    overflow:hidden; /* 영역이 0으로 줄었을 때 안쪽 a태그를 넓이에 맞추어 숨김 */
    transition: all 0.5s ease-in-out;
}

.sidenav a {
    display:block;
    width: 200px;
    box-sizing: border-box;
    padding: 8px 20px;
    color: #fff;
    text-decoration: none;
}

.sidenav a:hover {
    background-color: #00acac;
}

.menuBtn {
    position: fixed;
    left: 0;
    top: 50px;
    width: 50px;
    height: 50px;
    z-index: 40;
    color: #fff;
    display: block;
    text-align: center;
    line-height: 50px;
    cursor: pointer;
    background-color: #263238;
}

@media (max-width: 767px) {
    .sidenav {
        width: 0px;
    }
}

.css 파일은 위와 같이 만들어져 있습니다.

 

화면을 보여줄 html 파일은 아래와 같이 만들었 습니다.

여기에 작동하는 .js 파일은 보통 </body> 아래에 작성을 한다고 합니다. ( .js 파일은 작동 순서때문에 위치가 중요 )

 

만약, window.onload 를 쓰게 되면, 순서에 상관은 없지만, 한 화면 ( 하나의 .html 파일 ) 에서는 window.onload를 1번만 사용할 수 있기 때문에, 다른 .js 파일에서는 window.onload 를 사용할 수 없습니다.

 

var sidenav = document.querySelector(".sidenav");
var menuBtn = document.querySelector(".menuBtn");

menuBtn.addEventListener("click", onSidenav);

function onSidenav() {
    // console.log(sidenav.style.width);

    var btn = sidenav.style.width;
    // console.log(window.innerWidth); // 브라우저의 안쪽넓이

    if(window.innerWidth <= 767) { // 모바일 환경
        if(btn == "" || btn == "0px"){
            sidenav.style.width = "200px";
        } else {
            sidenav.style.width = "0px";
        }
    } else { // 웹환경
        if(btn == "" || btn == "200px"){
            sidenav.style.width = "0px";
        } else {
            sidenav.style.width = "200px";
        }
    }

}

java script 를 사용할 때, css 파일에서 적용한 값이 적용이 안되어 있기 때문에, if 문에는 위와같이 "" 일 때도 고려해서 작성을 해주어야 합니다.

'Java Script' 카테고리의 다른 글

Day75 - [js]노드회전  (0) 2021.06.02
Day74 - [js]태그의 추가 및 삭제  (0) 2021.06.01
Day73 - [js]DOM(Document Object Model) , css속성 변경  (0) 2021.05.31
Day72 - [js]이벤트  (0) 2021.05.30
Day71 - [js]객체와 JSON함수  (0) 2021.05.27