코딩/수업메모

HTML, CSS, JS 활용 - 24 ~26 강

ponyo118 2026. 3. 16. 17:33

24강 - 스크롤트리거로 탑바 배경색이 섹션의 배경색에 맞게 자동변환

[html]

<!-- 제이쿼리 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

<!-- gsap -->
<script src="https://unpkg.co/gsap@3/dist/gsap.min.js"></script>
<script src="https://unpkg.com/gsap@3/dist/ScrollTrigger.min.js"></script>

<header class="top-bar">
  헤더입니다.
</header>

<!-- section*10.section.section-${섹션 $} -->
<section class="section section-1">섹션 1</section>
<section class="section section-2">섹션 2</section>
<section class="section section-3">섹션 3</section>
<section class="section section-4 dark">섹션 4</section>
<section class="section section-5">섹션 5</section>
<section class="section section-6 dark">섹션 6</section>
<section class="section section-7">섹션 7</section>
<section class="section section-8 dark">섹션 8</section>
<section class="section section-9">섹션 9</section>
<section class="section section-10 dark">섹션 10</section>

 

[css]

body {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.top-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;  
  height: 50px;
  border: 2px solid currentcolor;
}

.top-bar.dark {
  color: white;
}

.section {
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 4rem;
  font-weight: bold;
}

.section.dark {
  background-color: black;
  color: white;
}

 

[js]

// scrollTrigger 플로그인 등록
gsap.registerPlugin(ScrollTrigger);

// 각 section.dark 요소마다 ScrollTigger 인스턴스를 생성
$(".section.dark").each(function (index, node) {
  ScrollTrigger.create({
    trigger: node, // 트리거 요소 설정
    start: "top top+=50", // 트리거 요소의 top이 뷰포트 top에서 50px 아래에 닿을 때 시작
    end: "bottom top", // 트리거 요소의 bottom이 뷰포트 top에 닿을 때 종료
    scrub: true, // 스크롤과 애니메이션을 동기화
    onEnter: () => $(".top-bar").addClass("dark"), // 들어올 때 .top-bar에 'dark'클래스 추가
    onLeave: () => $(".top-bar").removeClass("dark"), // 나갈 때 .top-bar에 'dark'클래스 제거
    onEnterBack: () => $(".top-bar").addClass("dark"), // 다시 들어올 때 .top-bar에 'dark'클래스 추가
    onLeaveBack: () => $(".top-bar").removeClass("dark") // 다시 나갈 때 .top-bar에 'dark'클래스 제거    
  });
});

동영상

25강 - mix-blend-mode로 탑바 배경색이 섹션의 배경색에 맞게 자동변환

[html]

<header class="top_bar">
    헤더입니다.
</header>

<!-- section*10.section.section-${섹션 $} -->
<section class="section section-1">섹션 1</section>
<section class="section section-2">섹션 2</section>
<section class="section section-3 dark">섹션 3</section>
<section class="section section-4">섹션 4</section>
<section class="section section-5 dark">섹션 5</section>
<section class="section section-6">섹션 6</section>
<section class="section section-7">섹션 7</section>
<section class="section section-8 dark">섹션 8</section>
<section class="section section-9">섹션 9</section>
<section class="section section-10 dark">섹션 10</section>

[css]

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

.top_bar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100px;
    color: white; /* 필수 */
    border: 2px solid currentcolor;
    z-index: 100;
    mix-blend-mode: difference;
}

section {
    min-height: 100vh;
    background-color: white; /* 필수 */
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 4rem;
    font-weight: bold;
}

section.dark {
    background-color: black;
    color: white;
}

[js]

 

동영상

26강 - 커서효과

[html]

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div class="cursor"></div>
<div class="cursor-shadow"></div>

<div class="body-content">
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur <span class="cursor-big">adipisicing</span> elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur <span class="cursor-big">adipisicing</span> elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur <span class="cursor-big">adipisicing</span> elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur <span class="cursor-big">adipisicing</span> elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur <span class="cursor-big">adipisicing</span> elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
    <button class="cursor-big" onclick="alert('버튼 클릭됨');">버튼</button>
    Lorem ipsum dolor sit amet, consectetur <span class="cursor-big">adipisicing</span> elit. Nisi ipsa velit ea dicta pariatur veritatis voluptate fugiat voluptatum vel minus perspiciatis autem nesciunt assumenda, debitis recusandae dignissimos distinctio illum quos?
</div>


<section style="width: 500px; height: 100px; background-color: black;"></section>

[css]

body {
    margin: 0;
}

* {
    cursor: none;
}

.body-content {
    background-color: white;
}

.cursor {
    position: fixed;
    width: 10px;
    height: 10px;
    top: -300px;
    left: -300px;
    border-radius: 50%;
    background-color: white;
    pointer-events: none;
    transform: translate(-50%, -50%);
    z-index: 100;
    mix-blend-mode: difference;
}

.cursor-shadow {
    position: fixed;
    width: 20px;
    height: 20px;
    top: -300px;
    left: -300px;
    border-radius: 50%;
    background-color: white;
    pointer-events: none;
    transform: translate(-50%, -50%);
    /* transition: top .3s .1s, left .3s .1s; */
    transition: width .1s, height .1s, top .1s, left .1s;
    z-index: 99;
    mix-blend-mode: difference;
}

.need-to-cursor-big .cursor-shadow {
    width: 50px;
    height: 50px;
}

.cursor-big {
    color: red;
    cursor: pointer;
}

[js]

console.clear();

const $cursor = $('.cursor');
const $cursorShadow = $('.cursor-shadow');

$(window).mousemove(function(e) {    
    $cursor.css({
        top: e.clientY,
        left: e.clientX
    });
    
    $cursorShadow.css({
        top: e.clientY,
        left: e.clientX
    });
});

$('.cursor-big').mouseenter(function() {
    $('html').addClass('need-to-cursor-big');
});

$('.cursor-big').mouseleave(function() {
    $('html').removeClass('need-to-cursor-big');
});

동영상

 

'코딩 > 수업메모' 카테고리의 다른 글

깃 명령어 정리  (0) 2026.03.18
HTML, CSS, JS 활용 - 27 ~ 29강  (0) 2026.03.17
HTML, CSS, JS 활용 - 20 ~ 23강  (1) 2026.03.13
HTML, CSS, JS 활용 - 15 ~ 19강  (0) 2026.03.12
HTML, CSS, JS 활용 - 11 ~ 14강  (0) 2026.03.11