์๋ฐ์คํฌ๋ฆฝํธ : ํจ๋ด๋์ค ํจ๊ณผ : ์ด์ง๊ฐ ํจ๊ณผ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํจ๊ณผ๋ค ์ค, ํจ๋ด๋์ค ํจ๊ณผ์ ๋๋ค. ์ด๋ฒ์๋ ์คํฌ๋กค์ ๋ด๋ฆด ๋๋ง๋ค ๊ธ์์ ์ด๋ฏธ์ง์ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ์ด, ์ฝ๊ฐ์ ์ด์ง๊ฐ์ด ๋๊ปด์ง๋๋ก ์์ ํด ๋ณด์์ต๋๋ค.
1. ์คํฌ๋กค ์ด๋ฒคํธ ๋ง๋ค์ด ์ฃผ๊ธฐ
function scroll() {
requestAnimationFrame(scroll);
};
scroll();
์ค๋ ์์ ํ ๋ชจ๋ ํจ์๋ค์, ์ฌ๊ท ํจ์์ธ scroll() ๋ด์์ ์์ ํ ์์ ์ ๋๋ค. ํจ๋ด๋์ค ํจ๊ณผ 3๋ฒ์์๋ ์ค๋ช ํ๋ฏ์ด, addEventListener๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฒ๋ฒ ๊ฑฐ๋ฆผ ํ์์ ํผํ๊ธฐ ์ํด์์ ๋๋ค.
2. ํ์ฌ ์คํฌ๋กค์ ๋์ด๊ฐ ๊ตฌํ๊ธฐ
let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
document.querySelector("#parallax__info span").innerText = Math.ceil(scrollTop);
ํจ๋ด๋์ค ํจ๊ณผ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์คํฌ๋กค๊ฐ์ ๋จผ์ ๊ตฌํด์ค๋๋ค. ๋ธ๋ผ์ฐ์ ์ ์ข์ธก ํ๋จ์ ํ์ํ info ๋ฐ์ค์ ์คํฌ๋กค๊ฐ์ด ๋ํ๋๋๋ก querySelector๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํด ์ฃผ์์ต๋๋ค.
3. ์คํฌ๋กค๊ฐ์ ๋ฐ๋ผ ๊ฐ ์ฝํ ์ธ ๋ค์ด ๋ํ๋๋๋ก ์์ ํ๊ธฐ
document.querySelectorAll(".content__item").forEach((item) => {
const target1 = item.querySelector(".content__item__img"); // ์ด๋ฏธ์ง
const target2 = item.querySelector(".content__item__desc"); // ๊ธ์
const target3 = item.querySelector(".content__item__num"); // ์ซ์
let offset = (scrollTop - item.offsetTop) * 0.1; // ์์ง์ ์๋ ์กฐ์
let offset2 = (scrollTop - item.offsetTop) * 0.15;
let offset3 = (scrollTop - item.offsetTop) * 0.2;
target1.style.transform = `translateY(${offset}px)`;
target2.style.transform = `translateY(${offset2}px)`;
๋จผ์ , ์ด๋ฏธ์ง, ๊ธ์, ์ซ์์ ์ ํ์๋ฅผ ๊ฐ๊ฐ ์์ฑํด ์ค๋๋ค.
๊ฐ๊ฐ์ offset ๊ฐ์ scrollTop์์ ๊ฐ ์ฝํ
์ธ ๋ค์ offsetTop๊ฐ์ ๋นผ์ค ํํ์
๋๋ค.
์ด๋ ์ฌ์ค์ ์ผ๋ก ์ด๋ก ์ ๋์ผํ ๊ฐ์ด์ง๋ง, ์ค์ฐจ๋ ์กด์ฌํฉ๋๋ค. ๊ทธ์ ๋ฐ๋ผ ์์ง์์
์๋๋ฅผ ์กฐ์ ํ๊ธฐ ์ํด์ ์ซ์๋ฅผ ๊ณฑํด์ค ๊ฒ์
๋๋ค. ์ซ์๊ฐ ์ปค์ง๋ฉด ๋ณด๋ค ํฐ ์์ง์์
๋ํ๋
๋๋ค.
์์ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ก transform ์์ฑ์ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์๋ ์์ง๋ง,
์๋์ ๊ฐ์ด GSAP๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์
์ ์์
ํ ์ ์์ต๋๋ค.
4. GSAP๋ก ๋ ๋ถ๋๋ฌ์ด ์์ง์ ๊ตฌํํ๊ธฐ
// target1.style.transform = `translateY(${offset}px)`;
// target2.style.transform = `translateY(${offset2}px)`;
gsap.to(target1, { duration: 0.3, y: offset, ease: "power4.out" });
gsap.to(target2, { duration: 0.3, y: offset2 });
gsap.to(target3, { duration: 0.3, y: offset3, ease: "expo.out" });
}
gsap ๋งํฌ๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์ ์ฉ ์๊ฐ(duration), ํจ๊ณผ(ease) ๋ฑ์ ์ค์ ํด ์ค๋๋ค. power, expo ๋ฑ์ GSAP์ ์์ง์ ํจ๊ณผ๋ค ์ค ํ๋์ ๋๋ค. GSAP ํํ์ด์ง์์ ๋ฉ๋ด ์ค DOCS(์ฌ๊ธฐ)์ ๋ค์ด๊ฐ๋ฉด ๋ค์ํ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ
'Javascript Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ๋ง์ฐ์ค ํจ๊ณผ : ์ด๋ฏธ์ง ํจ๊ณผ (3) | 2022.09.22 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ๋ง์ฐ์ค ํจ๊ณผ : ์กฐ๋ช ํจ๊ณผ (9) | 2022.09.22 |
์๋ฐ์คํฌ๋ฆฝํธ ๋ง์ฐ์ค ํจ๊ณผ : ๋ง์ฐ์ค ๋ฐ๋ผ๋ค๋๊ธฐ(GSAP) (4) | 2022.09.18 |
์๋ฐ์คํฌ๋ฆฝํธ ์ฌ๋ผ์ด๋ ํจ๊ณผ : ๋ฒํผ (3) | 2022.09.18 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ๋ํ๋๊ธฐ (4) | 2022.09.18 |
๋๊ธ