๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript Effect

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒจ๋Ÿด๋ž™์Šค ํšจ๊ณผ : ๋‚˜ํƒ€๋‚˜๊ธฐ

by ์ฝ”ํŒŒ์นด 2022. 9. 18.
728x90

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ : ํŒจ๋Ÿด๋ž™์Šค ํšจ๊ณผ : ๋‚˜ํƒ€๋‚˜๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋“ค ์ค‘, ํŒจ๋Ÿด๋ž™์Šค ํšจ๊ณผ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ํŒจ๋Ÿด๋ ‰์Šค ํšจ๊ณผ 1๋ฒˆ๊ณผ ๊ฐ™์€ ๋ฉ”๋‰ด ๋””์ž์ธ์ด์ง€๋งŒ, ์Šคํฌ๋กค์˜ ์œ„์น˜์— ๋”ฐ๋ผ ์ฝ˜ํ…์ธ ์˜ ๊ฐ ๋‚ด์šฉ๋ฌผ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์œ ํ˜•์„ ์ž‘์—…ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1. JAVASCRIPT๋กœ ์Šคํฌ๋กค ์ด๋ฒคํŠธ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ

2-1) addEventListener

window.addEventListener("scroll", ํ•จ์ˆ˜๋ช…);

์ง€๊ธˆ๊นŒ์ง€๋Š” addEventListener๋กœ ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋ฅผ ์ž‘์—…ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ด ๋ฐฉ๋ฒ•์€ ์Šคํฌ๋กค์„ ๋งค๋ฒˆ ๊ฐ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ์—๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

2-2) ์žฌ๊ท€ํ•จ์ˆ˜(Recursion)

function scroll() {
    let scrollTop = window.pageYOffset || document.documentElement.scrollTop || window.screenY;
    document.querySelectorAll(".content__item").forEach((item) => {
        if (scrollTop > item.offsetTop - window.innerHeight / 2) {
            item.classList.add("show");
        }
    });
    requestAnimationFrame(scroll);
}
scroll();

์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์ž๊ธฐ ์Šค์Šค๋กœ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
requestAnimationFrame ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์— ๊ด€๊ณ„ ์—†์ด ์ ์ ˆํ•œ ํ”„๋ ˆ์ž„ ์†๋„๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ตœ์ ํ™”๋œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

2. CSS๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ์ฃผ๊ธฐ

2-1) ํ•œ๋ฒˆ์— ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๊ธฐ

#contents > section {
    opacity: 0;
    transition: all 1s;
}
#contents > section.show {
    opacity: 1;
} 

์ตœ์ข… ๋ชฉํ‘œ๋Š” ๊ฐ ์„น์…˜์˜ ๋ฒˆํ˜ธ, ์ œ๋ชฉ, ์‚ฌ์ง„, ๊ธ€์ž๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์‹œํ—˜ ์‚ผ์•„ ํ•œ๋ฒˆ์— ๋‚˜ํƒ€๋‚˜๋„๋ก ๋จผ์ € ์ž‘์—…ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์€ ๋“ฏ...

2-2) ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๊ธฐ

#contents > section .content__item__num {
    opacity: 0;
    transform: translateY(200px);
    transition: all 1s 0.1s cubic-bezier(0.42, 0, 0.64, 1.07);
}
#contents > section .content__item__title {
    opacity: 0;
    transform: translateX(-100px);
    transition: all 1s 0.3s cubic-bezier(0.42, 0, 0.64, 1.07);
}
#contents > section .content__item__imgWrap {
    opacity: 0;
    transform: translateY(200px) rotate(30deg) skew(20deg);
    transition: all 1s 0.6s cubic-bezier(0.42, 0, 0.64, 1.07);
}
#contents > section .content__item__desc {
    opacity: 0;
    transform: translateX(-200px);
    transition: all 1s 0.9s cubic-bezier(0.42, 0, 0.64, 1.07);
}
#contents > section.show .content__item__num {
    opacity: 0.07;
    transform: translateY(0);
}
#contents > section.show .content__item__title {
    opacity: 1;
    transform: translateX(0);
}
#contents > section.show .content__item__imgWrap {
    opacity: 1;
    transform: translateY(0) rotate(0) skew(0);
}
#contents > section.show .content__item__desc {
    opacity: 1;
    transform: translateX(0);
}
#contents > section:nth-child(even) .content__item__title {
    transform: translateX(100px);
}
#contents > section:nth-child(even).show .content__item__title {
    transform: translateX(0);
}
#contents > section:nth-child(even) .content__item__desc {
    transform: translateX(200px);
}
#contents > section:nth-child(even).show .content__item__desc {
    transform: translateX(0);
}

๊ฐ๊ฐ์˜ ์ฝ˜ํ…์ธ ์— opacity, transform ์ดˆ๊ธฐ ๊ฐ’์„ ์„ค์ •ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„, show ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ํšจ๊ณผ๋ฅผ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ง์ˆ˜ ๋ฒˆ์งธ์˜ ํ…์ŠคํŠธ๋Š” ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ™€์ˆ˜ ๋ฒˆ์งธ์˜ ํ…์ŠคํŠธ๋Š” ์™ผ์ชฝ์—์„œ, ์ง์ˆ˜ ๋ฒˆ์งธ์˜ ํ…์ŠคํŠธ๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ๋‚˜ํƒ€๋‚˜๋„๋ก nth-child(even)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
transition์˜ ๊ฒฝ์šฐ cubic-bezier๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•ด ์ฃผ์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ ๊ฒ€์‚ฌ(F12)์—์„œ ๊ณก์„ ์„ ์กฐ์ ˆํ•˜๋ฉฐ ๊ฐ ์ˆ˜์น˜์— ๋”ฐ๋ฅธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹œํ—˜ํ•ด ๋ณด๊ณ , ์ ์ ˆํ•œ ์ˆ˜์น˜๋ฅผ ์ฐพ์•„ ์ ์šฉํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.


๊ฒฐ๊ณผ

์ฃผ๋ง์€ ์™œ์ด๋ฆฌ ์งง์€ ๊ฑธ๊นŒ์š”?

728x90

๋Œ“๊ธ€

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฆ™

CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘