๋ง์ฐ์ค ์ดํํธ 03 : ์กฐ๋ช ํจ๊ณผ
์ด๋ฒ ์๊ฐ์๋ GSAP๋ฅผ ์ด์ฉํ์ฌ ๋ง์ฐ์ค ์ปค์์ ์กฐ๋ช ํจ๊ณผ๋ฅผ ์ ํ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
HTML ์์ค
header, main(๋ง์ฐ์ค ์ปค์ & ๋ช ์ธ), footer(๋ชจ๋ฌ ๋ฐ์ค) ํฌ๊ฒ 3๊ฐ์ง๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. footer์ ๋ชจ๋ฌ ๋ฐ์ค ๋ด์ฉ์ ๋๋ฌด ๊ธธ์ด์ง๋ฏ๋ก ์๋ตํ๋ค. ๋ชจ๋ฌ ๋ฐ์ค๋ฅผ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ด์ ์ ์ ๋ก๋ํ ์ฌ๋ผ์ด๋ ์ดํํธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ ๊ฒ.
<body class="img04">
<header id="header">
<h1>JAVASCRIPT MOUSE EFFECT 03</h1>
<p>๋ง์ฐ์ค ์ดํํธ - ์กฐ๋ช
ํจ๊ณผ</p>
<ul>
<li><a href="mouseEffect01.html">01</a></li>
<li><a href="mouseEffect02.html">02</a></li>
<li class="active"><a href="mouseEffect03.html">03</a></li>
<li><a href="mouseEffect04.html">04</a></li>
<li><a href="mouseEffect05.html">05</a></li>
<li><a href="mouseEffect06.html">06</a></li>
<li><a href="mouseEffect07.html">07</a></li>
</ul>
</header>
<!-- //header -->
<main id="main">
<section id="mouseType">
<div class="mouse__cursor"></div>
<div class="mouse__wrap">
<p><span class="style1">The future</span> depends on <span class="style2">what we do</span> in the <span class="style3">present</span>.</p>
<p><span class="style4">๋ฏธ๋</span>๋ <span class="style5">ํ์ฌ</span> ์ฐ๋ฆฌ๊ฐ <span class="style6">๋ฌด์์ ํ๋๊ฐ</span>์ ๋ฌ๋ ค ์๋ค.</p>
</div>
</section>
</main>
<!-- //main -->
<footer>
<!-- ๋ชจ๋ฌ ๋ฐ์ค ๋ด์ฉ ๋ค์ด๊ฐ ๊ณณ. ๊ธธ์ด์ง๋ฏ๋ก ์๋ต. -->
</footer>
<!-- //footer -->
</body>
CSS ์์ค
body์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง์ ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ๋ง์ฐ์ค ์ปค์ ์์ญ์ background-image๋ก ๋ถ๋ฌ์จ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ง์ฐ์ค ์ปค์์ ์กฐ๋ช ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค. ๊ณตํต/์ด๊ธฐํ CSS ์์ค๋ ํ๋จ์ [CSS ์์ค ๋ณด๊ธฐ]๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ณผ ์ ์๋ค.
.mouse__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: white;
overflow: hidden;
}
.mouse__wrap p {
font-size: 2vw;
line-height: 2;
font-weight: 300;
}
.mouse__wrap p:last-child {
font-weight: 300;
font-size: 3vw;
}
.mouse__wrap p span {
border-bottom: 0.15vw dashed orange;
color: orange;
}
@media (max-width: 800px) {
.mouse__wrap p {
padding: 0 20px;
font-size: 24px;
line-height: 1.5;
text-align: center;
margin-bottom: 10px;
}
.mouse__wrap p:last-child {
font-size: 40px;
line-height: 1.5;
text-align: center;
word-break: keep-all;
}
}
.mouse__cursor {
position: absolute;
left: 0;
top: 0;
width: 200px;
height: 200px;
z-index: -1;
border-radius: 50%;
background-image: url(../assets/img/effect_bg04.jpg);
background-size: cover;
background-position: center;
background-attachment: fixed;
border: 10px solid snow;
}
JS ์์ค
๋ง์ฐ์ค ์ปค์๊ฐ ๋ด๊ธด ์์๋ฅผ ์์ฑํ๊ณ , ์์ ๋๋น๊ฐ์ ๊ตฌํ ๋ค์ GSAP ๋ฐฉ์์ผ๋ก ์ปค์์ ์์ง์์ ๋ถ๋๋ฝ๊ฒ ํด์ฃผ๋๋ก ํ๋ค.
const cursor = document.querySelector(".mouse__cursor"); // ๋ง์ฐ์ค ์ปค์
// ์์ ๋๋น๊ฐ ๊ตฌํ๋ ๋ฐฉ๋ฒ 1
// const circleW = cursor.offsetWidth // 200
// const circleH = cursor.offsetWidth; // 200
// const circle2 = cursor.clientWidth; // 190 : ๋ณด๋๊ฐ ์ ์ธ
// ์์ ๋๋น๊ฐ ๊ตฌํ๋ ๋ฐฉ๋ฒ 2 (๋ง์ด ์ฐ์ด๋ ๋ฐฉ๋ฒ โ
โ
โ
)
const circle = cursor.getBoundingClientRect();
console.log(circle);
// const DOMRect = {
// x: 0,
// y: 0,
// bottom: 200,
// height: 200,
// left: 0,
// right: 200,
// top: 0,
// width: 200
// }
window.addEventListener("mousemove", (e) => {
gsap.to(cursor, {
duration: 0.5,
left: e.pageX - circle.width/2,
top: e.pageY - circle.height/2,
});
});
๊ฒฐ๊ณผ
'Effect > Mouse Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Mouse Efffect] ๋ง์ฐ์ค ์ดํํธ 06 (2) | 2022.09.29 |
---|---|
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 05 - ๊ธฐ์ธ๊ธฐ ํจ๊ณผ / ๊ธ์จ ๋ฐ์ ํจ๊ณผ (3) | 2022.09.28 |
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 04 - ์ด๋ฏธ์ง ํจ๊ณผ (5) | 2022.09.22 |
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 02 - GSAP (2) | 2022.09.18 |
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 01 (6) | 2022.09.05 |
๋๊ธ