☭DEVELOPER/#2 웹개발(자바기반 풀스택)

비주얼 스튜디오 코드 63_ parallax07

조반짝 2023. 7. 5. 10:23
728x90
반응형

▶ 네비게이션을 닷메뉴 형태로 변경

html 마크업

css reset 

#contents css 편집

각 article 배경색 넣기

article 한번에 편집 

 

#header css 편집

#dot - ul(menu) css 편집

fixed 시키고 위치 변경하기

.li css 편집

menu 1-6 글자 지우기

parallax 적용

script

dot 클릭하면 해당페이지로 움직이게 하기

스크롤 좌표 알아보기

페이지별 dot이 활성화되면서 해당페이지로 이동한다.

<html>

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>네비게이션을 닷메뉴 형태로 변경</title>
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>
    <header id="header">
        <h1>C's Web</h1>
    </header>
    <nav id="dot">
        <ul>
            <li class="active"><a href="#"><em>menu1</em></a></li>
            <li><a href="#"><em>menu2</em></a></li>
            <li><a href="#"><em>menu3</em></a></li>
            <li><a href="#"><em>menu4</em></a></li>
            <li><a href="#"><em>menu5</em></a></li>
            <li><a href="#"><em>menu6</em></a></li>
        </ul>
    </nav>
    <section id="contents">
        <article id="article1"><h2>언어의 한계가 곧 자기세계의 한계다.</h2></article>
        <article id="article2"><h2>교육은 최상의 노후대비책이다.</h2></article>
        <article id="article3"><h2>용기란 공포를 1분 더 참는 것이다.</h2></article>
        <article id="article4"><h2>욕망은 이성의 지배하에 두어라</h2></article>
        <article id="article5"><h2>교육의 위대한 목표는 앎이 아니라 행동이다.</h2></article>
        <article id="article6"><h2>계획 없는 목표는 한낱 꿈에 불과하다.</h2></article>
    </section>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

    <script>
        const dot = $("#dot > ul > li");
        const cont = $("#contents > article");

        dot.click(function(e){
            e.preventDefault();
            let target = $(this);
            let index = target.index();
            let section = cont.eq(index);
            let offset = section.offset().top;
            $("html,body").animate({scrollTop:offset},600);
        });
        $(window).scroll(function(){
            let wScroll = $(this).scrollTop();
            console.log(wScroll);

            if(wScroll >= cont.eq(0).offset().top){
                dot.removeClass("active");
                dot.eq(0).addClass("active")
            }
            if(wScroll >= cont.eq(1).offset().top){
                dot.removeClass("active");
                dot.eq(1).addClass("active")
            }
            if(wScroll >= cont.eq(2).offset().top){
                dot.removeClass("active");
                dot.eq(2).addClass("active")
            }
            if(wScroll >= cont.eq(3).offset().top){
                dot.removeClass("active");
                dot.eq(3).addClass("active")
            }
            if(wScroll >= cont.eq(4).offset().top){
                dot.removeClass("active");
                dot.eq(4).addClass("active")
            }
            if(wScroll >= cont.eq(5).offset().top){
                dot.removeClass("active");
                dot.eq(5).addClass("active")
            }
            if(wScroll >= cont.eq(6).offset().top){
                dot.removeClass("active");
                dot.eq(6).addClass("active")
            }

        });
    </script>

</body>
</html>

<css>

@charset "utf-8";

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    color: #222;
}
li{
    list-style: none;
}
a{
    text-decoration: none;
    color: #222;
}
.clearfix::before,.clearfix::after{
    display: block;
    clear: both;
    content: "";
}

#header{
    position: fixed;
    width: 100%;
    height: 60px;
    background-color: rgba(255, 255, 255, 0.3);
    display: flex;
    justify-content: center;
    align-items: center;
}
#header h1{color: yellowgreen;}
#dot{
    position: fixed;
    top: 50%;
    right: 20px;
    /* translate로 중앙으로 위치 배정 */
    transform: translateY(-50%);
}
#dot ul{}
#dot ul li{
    margin: 8px;
}
#dot ul li a{
    display: block;
    width: 20px;
    height: 20px;
    background-color: rgba(255, 255, 255, 0.5);
    border-radius: 50%;
    
}
#dot ul li a em{
    /* 글자 지우기 */
    font-size: 0;
    line-height: 0;
    width: 0;
    height: 0;
}
#dot ul li.active{}
#dot ul li.active a{
    background-color: #fff;
}

#contents{
    text-align: center;
}
#contents > article{
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}
#contents > article > h2{
    font-size: 5vw;
    color: #fff;
}

#article1{background-color: lightblue;}
#article2{background-color: lightgreen;}
#article3{background-color: lightsalmon;}
#article4{background-color: lightcoral;}
#article5{background-color: lemonchiffon;}
#article6{background-color: lavenderblush;}
728x90
반응형