์๋ฐ์คํฌ๋ฆฝํธ : ํจ๋ด๋์ค ํจ๊ณผ : ๋ํ๋๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํจ๊ณผ๋ค ์ค, ํจ๋ด๋์ค ํจ๊ณผ์ ๋๋ค. ์ด๋ฒ์๋ ํจ๋ด๋ ์ค ํจ๊ณผ 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)์์ ๊ณก์ ์ ์กฐ์ ํ๋ฉฐ
๊ฐ ์์น์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์
์ ์ํํด ๋ณด๊ณ , ์ ์ ํ ์์น๋ฅผ ์ฐพ์ ์ ์ฉํด ์ฃผ์์ต๋๋ค.
๊ฒฐ๊ณผ
์ฃผ๋ง์ ์์ด๋ฆฌ ์งง์ ๊ฑธ๊น์?
'Javascript Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ๋ง์ฐ์ค ํจ๊ณผ : ๋ง์ฐ์ค ๋ฐ๋ผ๋ค๋๊ธฐ(GSAP) (4) | 2022.09.18 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ์ฌ๋ผ์ด๋ ํจ๊ณผ : ๋ฒํผ (3) | 2022.09.18 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ๋ฉ๋ด ์จ๊น, TOP๋ฒํผ (6) | 2022.09.10 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ์ฌ์ด๋ ๋ฉ๋ด (5) | 2022.09.08 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ๋ฉ๋ด ์ด๋ (9) | 2022.09.06 |
๋๊ธ