πŸ™‹πŸ» μ•žμ—μ„œ μš°λ¦¬λŠ” ν•˜λ‚˜μ˜ userInfoλΌλŠ” 화면을 λ§Œλ“€μ–΄ μ€¬μŠ΅λ‹ˆλ‹€.
이제 νŽ˜μ΄μ§€λ₯Ό λ°”κΏ”μ„œ 움직일 수 μžˆλŠ” μ‚¬μ΄λ“œ λ°” μž‘μ—…μ„ 해보도둝 ν• κ²Œμš”
ν•˜μ§€λ§Œ μ²˜μŒμ— λ§ν•œ 것 처럼 νŽ˜μ΄μ§€λ₯Ό μ΄λ™ν•˜λŠ” κ°œλ…μ€ μ•„λ‹ˆκ³ 
div전체가 μ‚¬λΌμ‘Œλ‹€κ°€ λ‚˜νƒ€λ‚¬λ‹€κ°€ ν•˜λŠ”λ“±μ˜ κΈ°λŠ₯μž…λ‹ˆλ‹€.

index.html sidebarμΆ”κ°€ν•˜κΈ°

νŽ˜μ΄μ§€λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€μ–΄μ„œ κ΄€λ¦¬ν•˜λŠ” κ°œλ…μœΌλ‘œ 가져가지 μ•ŠκΈ° λ•Œλ¬Έμ—
ν•˜λ‚˜μ˜ index νŽ˜μ΄μ§€μ—μ„œ μ½”λ“œλ§Œ μΆ”κ°€ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

<aside class="menu-aside hidden-menu">
            <button class="menu-button">β–ΆοΈŽ</button>
            <header class="aside-header">
                <h1 class="header-title"><i class="fa-regular fa-calendar-check"></i>TODOLIST</h1> 
            </header>
            <nav class="menu-nav">
                <ul class="menu-list">
                    <a href="javascript:void(0)" class="menu-items">
                        <li><i class="fa-regular fa-user"></i>User Information</li>
                    </a>
                    <a href="javascript:void(0)" class="menu-items">
                        <li><i class="fa-regular fa-calendar"></i>To Do List</li>
                    </a>
                </ul>
            </nav>
        </aside>

ν•΄λ‹Ή μ½”λ“œκ°€ μš°λ¦¬κ°€ λ§Œλ“€μ—ˆλ˜ mainνƒœκ·Έ μœ„λ‘œ μ˜¬λΌκ°€μ£Όλ©΄ λ©λ‹ˆλ‹€.
이 μ‚¬μ΄λ“œλ°” κ°™μ€κ²½μš° λ²„νŠΌμ„ λˆ„λ₯΄κ²Œ 되면 μ•ˆμœΌλ‘œ λ“€μ–΄κ°”λ‹€κ°€ λ‹€μ‹œ λˆ„λ₯΄λ©΄
λ°–μœΌλ‘œ λ‚˜μ˜€λŠ” ν˜•μ‹μœΌλ‘œ κ°€μ Έκ°ˆ κ²ƒμž…λ‹ˆλ‹€.

λ°”λ‘œ μ΄μ–΄μ„œ css λ₯Ό 보도둝 ν• κ²Œμš”
그리 μ–΄λ €μš΄ 뢀뢄이 μ—†μŠ΅λ‹ˆλ‹€.

.menu-aside {
    position: absolute;
    top: 0px;
    left: 0px;
    z-index: 99;

    width: 300px;
    height: 100%;
    box-shadow: 1px 0px 5px 1px black;
    background-color: #454545;
    transition: left 1s ease;
}

.hidden-menu {
    left: -300px;
}

.aside-header {
    display: flex;
    justify-content: space-between;
    align-items: center;

    padding: 20px 5px 20px 10px;
    border-bottom: 1px solid #dbdbdb;
    background-color: #121212;
}

.header-title, .aside-header i[class*="fa"] {
    color: #fff;
}

.menu-button {
    position: absolute;
    transform: translateY(-50%);
    top: 50%;
    right: -13px;

    display: flex;
    justify-content: center;
    align-items: center;
    
    border: none;
    border-bottom-right-radius: 20px;
    border-top-right-radius: 20px;
    padding: 0;
    width: 13px;
    height: 60px;

    background-color: #454545;
    color: #f0e5d3;
}

.menu-button:hover, .menu-button:active {
    background-color: #454545;
    text-shadow: 0px 0px 5px #f0e5d3;
}

.fa-calendar-check {
    padding: 0px 15px;
    font-size: 18px;
}

.header-title {
    font-size: 18px;
    cursor: default;
}

.menu-nav {
    padding: 20px 0px 0px;
}

.menu-items li{
    display: flex;
    align-items: center;

    border-bottom: 1px solid #dbdbdb;
    padding: 0px 20px;
    height: 40px;

    background-color: #303030;
    color: #fff;
    font-size: 16px;
}

.menu-items li:hover {
    background-color: #121212;
}

.menu-items li .fa-regular {
    padding: 0px 10px;
    color: #fff;
    font-size: 16px;
}

이제 Javascriptλ₯Ό μ΄μš©ν•œ κΈ°λŠ₯을 λ§Œλ“€μ–΄λ³Ό μƒκ°μž…λ‹ˆλ‹€.
κΈ°λŠ₯이라고 ν•˜κΈ°μ—” μ’€ κ·Έλ ‡μ§€λ§Œ μ‚¬μ΄λ“œλ°” κ°™μ€κ²½μš° νŽ˜μ΄μ§€λ₯Ό νžˆλ“ μ„ μ£Όκ³ 
λ²„νŠΌλ„ λ°©ν–₯을 λ°”κΏ”μ£ΌλŠ”λ“±μ˜ κΈ°λŠ₯μ΄μžˆμŠ΅λ‹ˆλ‹€

class AsideEvent {
    static #instance = null;
    static getInstance() {
        if(this.#instance == null){
            this.#instance = new AsideEvent();
        }
        return this.#instance;
    }


// button이 μ•ˆμœΌλ‘œ λ“€μ–΄κ°ˆ λ•Œμ™€ λ‚˜μ˜¬λ•Œμ˜ ꡬ별
    addEventShowMenuButton() {
        const menuButton = document.querySelector('.menu-button');
        menuButton.onclick = () => {
            const menuAside = document.querySelector('.menu-aside');
            if(menuAside.classList.contains('hidden-menu')){
                menuAside.classList.remove('hidden-menu');  
                menuButton.textContent = 'β—€οΈŽ';     
            }else {
                menuAside.classList.add('hidden-menu');
                menuButton.textContent = 'β–ΆοΈŽ';  
            }        
        }
    }

    addEventMainChange() {
        const menuItems = document.querySelectorAll('.menu-items');
        const menuButton = document.querySelector('.menu-button');
        menuItems.forEach((item, index) => {
            item.onclick = () => {
                const mainContainers = document.querySelectorAll('.main-container');
                const menuAside = document.querySelector('.menu-aside');
                mainContainers.forEach(container => {
                    container.classList.add('main-hidden');
                });
                mainContainers[index].classList.remove('main-hidden');
                menuAside.classList.add('hidden-menu');
                menuButton.textContent = 'β–ΆοΈŽ';  
            }
        });
   }
}

마치며..

🐳 μ‚¬μ΄λ“œλ°” κ°™μ€κ²½μš°μ— μ•žμ˜ userInfo 에 λΉ„ν•˜λ©΄ 정말 κ°„λ‹¨ν•œ κ΅¬ν˜„μž…λ‹ˆλ‹€. 그리고 ν˜„μž¬ μžλ°”μŠ€ν¬λ¦½νŠΈ 듀이 쓰여지고 μžˆμ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
APP.jsλΌλŠ” νŒŒμΌμ„ λ”°λ‘œ 두어 κ·Έμͺ½μ—μ„œ μœˆλ„μš°κ°€ λ‘œλ“œ λ λ•Œ 싀행을 ν•˜κΈ°μœ„ν•΄
κΈ°λŠ₯듀을 ν•¨μˆ˜λ‘œ μ •μ˜λ§Œ ν•˜κ³  싀행은 App.js μ—μ„œ μ‹€ν–‰ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

profile
λ°±μ—”λ“œ 개발자 쀀비쀑

0개의 λŒ“κΈ€