๐ฑ ๋ง์ฐ์ค ํจ๊ณผ : ์กฐ๋ช ํจ๊ณผ ๐ฑ
์ด๋ฒ ์๊ฐ์๋ ์ปค์์๊ฒ ์กฐ๋ช
ํจ๊ณผ๋ฅผ ์ฃผ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.๐
๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ด๋ก๊ฒํ ์ํ์์ ์ปค์ ์์ญ์ ๋๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๊ทธ ๋ถ๋ถ๋ง ๋ฐ์ ๋ณด์ฌ ๋ง์ง ์กฐ๋ช
์ ๋น์ถ ๋ฏ ํ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ต๋๋ค~~ ์ ๊ฐํ์ฃ ~?!
๊ทธ๋ผ ํจ๊ป ์ค์ตํด๋ด
์๋ค~!
#1. HTML / CSS ์ค์ ํ๊ธฐ
! HTML TIP !
ํ์ด์ง ์น์
๊ณผ ๋ง์ฐ์ค ์ธํฌ(์ปค์ ์์น๊ฐ ๋ฐ์ค)๋ฅผ ๊ฐ๊ฐ ๋๋์ด ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ ์ด์์์ ์ง ๋ค ์คํฌ๋ฆฝํธ๋ฅผ ์ํ ์ ํ์๋ฅผ ๊ฐ๊ฐ ๋ถ์ฌํฉ๋๋ค.
โ๏ธ HTML ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
<section id="mouseType03">
<div class="mouse__cursor"></div>
<div class="mouse__wrap">
<p><span class="style1">Energy</span> and <span>persistence</span> conquer all things</p>
<p><span>๊ธฐ์ด</span>๊ณผ <span>๋๊ธฐ</span>๋ ๋ชจ๋ ๊ฒ์ ์ด๊ฒจ๋ธ๋ค.</p>
</div>
</section>
! CSS TIP !
position: absolute; : ๊ธฐ์กด์ ๋ง์ฐ์ค ์ปค์๋ฅผ ๋ฐ๋ผ๋ค๋๋๋ก ํฌ์ง์
์ ์ ํด์ค๋๋ค. (์คํฌ๋ฆฝํธ์ GSAP์ ํตํด left์ top๊ฐ์ด ์ด๋ํ ๋ ๋ง๋ค ๋ณํ๋๋ก ์ค์ ํด์ค ๊ฒ์ด๋ฏ๋ก ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์ ์ ์ ์์น์์ผ ์ค๋๋ค.)
background-attachment: fixed; : ์ด๋ฏธ์ง ๊ณ ์ (๋ธ๋ผ์ฐ์ ์ฐฝ์ ์๋์ ์์น)์ผ๋ก ์คํฌ๋กค์ ๋ด๋ ค๋ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ๊ฐ์ง ์์ต๋๋ค!
โ๏ธ CSS ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ : ๋ง์ฐ์ค ํฌ์ธํฐ / ์ปค์ / ์๋๋ฉ์ด์ ํจ๊ณผ
/* mouseType */
.mouse__wrap {
width: 100%;
height: 100vh; /* vw๋ฅผ ์ฌ์ฉํ๋ฉด ์คํฌ๋กค์ด ์๊ธฐ๋ฏ๋กvh๋ก ์์
*/
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #fff;
overflow: hidden;
cursor: none;
}
.mouse__wrap p {
font-size: 2vw;
line-height: 2;
font-weight: 200;
}
.mouse__wrap p:last-child {
font-size: 3vw;
font-weight: 300;
}
.mouse__wrap p span {
padding-bottom: 3px;
border-bottom: 0.1vw solid #e7ad00;
color: #e7ad00;
}
@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 */
.mouse__cursor {
position: absolute;
left: 0;
top: 0;
width: 200px;
height: 200px;
z-index: -1;
border-radius: 50%;
background-image: url(../assets/img/city_bg05-2.jpg);
background-size: cover;
background-position: center;
background-attachment: fixed;
border: 5px solid #fff;
}
#2. JAVASCRIPT : ์คํฌ๋ฆฝํธ ์ง๊ธฐ
์ค๋์ ํฌ์ธํธ! getBoundingClientRect()๋ฉ์๋๋ฅผ ํตํด ์ปค์์ ์์น๊ฐ๊ณผ ํฌ๊ธฐ๊ฐ์ ๋ชจ๋ ๋ถ๋ฌ์ต๋๋ค. ๊ทธ ๋ค ์ปค์์ ๊ฐ๋ก, ์ธ๋ก๊ธธ์ด๋ฅผ ๋ถ๋ฌ์จ ๋ค ์ปค์๋ฅผ ์์ญ ๊ฐ์ด๋ฐ๋ก ๋ง์ถฐ์ค๋๋ค!
์ค๋ ์คํฌ๋ฆฝํธ๋ ๊ฐ๋จํ ํธ์ด๋ ๋จผ์ ์ฃผ์๊ณผ ํจ๊ป ํ๋ฆ์ ์ดํด ํ๋ค ์ ๋ฆฌ๋ ์ ์ฒด ์คํฌ๋ฆฝํธ๋ก ๋ค์ ํ ๋ฒ ๋ณต์ตํด๋ด
์๋ค~!
๐ก ์ ์ฒด ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
//์ ํ์
const cursor = document.querySelector(".mouse__cursor"); // ์ปค์
// const circleW = cursor.offsetWidth; //200 : ๋ณด๋ ๊ฐ ํฌํจ
// const circleH = cursor.offsetHdight; //200 : ๋ณด๋ ๊ฐ ํฌํจ
// const circle2 = cursor.clientWidth; //190 : ๋ณด๋ ๊ฐ ์ ์ธ
const circle = cursor.getBoundingClientRect(); //์ปค์์ ๋ชจ๋ ์์น๊ฐ
//getBoundingClientRect() ๋ฉ์๋๊ฐ ๋ถ๋ฌ์ค๋ ์์น๊ฐ๋ค (์ปค์์ ์์ญ ํฌ๊ธฐ == 200*200)
// const DOMRect = {
// x: 0,
// y: 0,
// bottom: 200,
// height: 200,
// lift: 0,
// right: 200,
// top: 0,
// width: 200
// }
//๋ง์ฐ์ค๊ฐ ์์ง์ผ ๋ ์ปค์์ ์ด๋ฒคํธ์ค์
//GSAP์ผ๋ก ์ค์ : ์ง์์๊ฐ / ์ปค์์ ์ผ์ชฝ ๊ธฐ์ค ์ปค์์ ์์ชฝ ๊ธฐ์ค์ผ๋ก ์ปค์์ ์์น๊ฐ ์ ํ๊ธฐ
window.addEventListener("mousemove", (e) => {
gsap.to(cursor, {
duration: 0.3,
//์ปค์๊ฐ ์ปค์ ์์ญ ๊ฐ์ด๋ฐ๋ก ์ค๋๋ก ๋ฐ์ ๋๋์ด ์ค๋ค.
left: e.pageX - circle.width/2,
top: e.pageY - circle.height/2,
});
});
//01 ์ ํ์
const cursor = document.querySelector(".mouse__cursor"); // ์ปค์
const circle = cursor.getBoundingClientRect(); //์ปค์์ ๋ชจ๋ ์์น๊ฐ
//02 ๋ง์ฐ์ค๊ฐ ์์ง์ผ ๋ ์ปค์์ ์ด๋ฒคํธ์ค์ : GSAP
window.addEventListener("mousemove", (e) => {
gsap.to(cursor, {
duration: 0.3,
left: e.pageX - circle.width/2,
top: e.pageY - circle.height/2,
});
});
โ๏ธ ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ : ์๋ฐ์คํฌ๋ฆฝํธ
! JAVASCRIPT TIP !
1. ๋จผ์ ์ปค์ ์ ํ์๋ฅผ ๋ง๋ค์ด์ค ๋ค ์ปค์์ ์์น๊ฐ์ ๋ชจ๋ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ์์๊ฐ์ฒด์ ๋ฉ์๋์ธ getBoundingClientRect()๋ฅผ ์ด์ฉํด์ค๋๋ค.
2. ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ฉ์๋ ์ค mousemove๋ฅผ ํตํด ๋ง์ฐ์ค๊ฐ ์์ง์ผ ๋ ์คํ๋๋ ์์(์ปค์) ์ด๋ฒคํธ ํจ์๋ฅผ ๋ง๋ญ๋๋ค.
3. GSAP์ ํตํด ์ปค์๋ฅผ ์ปค์ ์์ญ ๊ฐ์ด๋ฐ๋ก ๋ง์ถฐ์ค ๋ค ๋ถ๋๋ฝ๊ฒ ์๋๋๋๋ก ์ง์์๊ฐ์ ์ค์ ํด์ค๋๋ค.
#3. ๊ฒฐ๊ณผ ๋ณด๊ธฐ ๐
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[EFFECT] ๋ง์ฐ์ค ํจ๊ณผ 05 : ๊ธฐ์ธ๊ธฐ ํจ๊ณผ / ๊ธ์จ ๋ฐ์ ํจ๊ณผ (2) | 2022.09.29 |
---|---|
[EFFECT] ๋ง์ฐ์ค ํจ๊ณผ 04 : ์ด๋ฏธ์ง ํจ๊ณผ (3) | 2022.09.23 |
[EFFECT] ํ๋ด๋ ์ค ํจ๊ณผ05 : ์ด์ง๊ฐ ํจ๊ณผ (4) | 2022.09.21 |
[EFFECT] ์ฌ๋ผ์ด๋ ํจ๊ณผ 04 : ๋ฒํผ์ผ๋ก ์ด๋ฏธ์ง ์ด๋์ํค๊ธฐ! (2) | 2022.09.19 |
[EFFECT] ๋ง์ฐ์ค ํจ๊ณผ 02 : ์ปค์ ๋ฐ๋ผ๋ค๋๊ธฐ (2) | 2022.09.19 |
๋๊ธ