๋ง์ฐ์ค ์ดํํธ 06 : ํ ์คํธ ํจ๊ณผ
์ด๋ฒ ์๊ฐ์๋ ๋ง์ฐ์ค ์ดํํธ - ํ ์คํธ ํจ๊ณผ๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
HTML ์์ค
header, main(๋ง์ฐ์ค ์ปค์ & ์ด๋ฏธ์ง & ๋ช ์ธ & ๋ง์ฐ์ค ์ธํฌ(์ขํ๊ฐ)), footer(๋ชจ๋ฌ ๋ฐ์ค) ํฌ๊ฒ 3๊ฐ์ง๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. footer์ ๋ชจ๋ฌ ๋ฐ์ค ๋ด์ฉ์ ๋๋ฌด ๊ธธ์ด์ง๋ฏ๋ก ์๋ตํ๋ค. ๋ชจ๋ฌ ๋ฐ์ค๋ฅผ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ด์ ์ ์ ๋ก๋ํ ์ฌ๋ผ์ด๋ ์ดํํธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ ๊ฒ.
<body class="img04">
<header id="header">
<h1>JAVASCRIPT MOUSE EFFECT 06</h1>
<p>๋ง์ฐ์ค ์ดํํธ - ํ
์คํธ ํจ๊ณผ</p>
<ul>
<li><a href="mouseEffect01.html">01</a></li>
<li><a href="mouseEffect02.html">02</a></li>
<li><a href="mouseEffect03.html">03</a></li>
<li><a href="mouseEffect04.html">04</a></li>
<li><a href="mouseEffect05.html">05</a></li>
<li class="active"><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">
<div class="mouse__img">
<figure>
<img src="../assets/img/effect_bg01.jpg" alt="์ด๋ฏธ์ง">
</figure>
<div class="mouse__text">
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanSlow">Pain Past</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanSlow">Pain Past</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanFast">is pleasure.</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanFast">is pleasure.</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanSlow">์ง๋๊ฐ ๊ณ ํต์</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanSlow">์ง๋๊ฐ ๊ณ ํต์</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanFast">์พ๋ฝ์ด๋ค.</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanFast">์พ๋ฝ์ด๋ค.</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- //main -->
<footer>
<!-- ๋ชจ๋ฌ ๋ฐ์ค ๋ด์ฉ ๋ค์ด๊ฐ ๊ณณ. ๊ธธ์ด์ง๋ฏ๋ก ์๋ต. -->
</footer>
<!-- //footer -->
</body>
CSS ์์ค
.mouse__cursor.active์์ ๋ง์ฐ์ค ์ปค์๊ฐ ํ ์คํธ ์์ ์ฌ๋ผ์์ ๋ ํฌ๊ธฐ๋ฅผ 5๋ฐฐ๋ก ์ค์ ํด์ค๋ค. ๊ณตํต/์ด๊ธฐํ CSS ์์ค๋ ํ๋จ์ [CSS ์์ค ๋ณด๊ธฐ]๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ณผ ์ ์๋ค.
<style>
/* mouseType */
.mouse__wrap {
color: #fff;
width: 100%;
height: 100vh;
cursor: none;
}
.mouse__img {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: -1;
}
.mouse__text {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -20%);
font-size: 3vw;
line-height: 1.5;
}
.mouse__text .line {
width: 100%;
display: flex;
}
.mouse__text .line .left {
width: 50vw;
color: orange;
overflow: hidden;
transform: skew(0deg, -15deg);
}
.mouse__text .line .left .spanWrap {
width: 100vw;
text-align: center;
}
.mouse__text .line .right {
width: 50vw;
overflow: hidden;
transform: skew(0deg, 15deg);
}
.mouse__text .line .right .spanWrap {
width: 100vw;
text-align: center;
transform: translateX(-50vw);
}
.mouse__text span {
display: inline-block;
}
.mouse__cursor {
position: absolute;
left: 0;
top: 0;
width: 20px;
height: 20px;
z-index: 9999;
border-radius: 50%;
background-color: rgba(255,255,255,0.9);
user-select: none;
pointer-events: none;
mix-blend-mode: difference;
transition: transform 0.3s;
}
.mouse__cursor.active {
transform: scale(5);
}
</style>
JS ์์ค
<script>
const mouseMove = (e) => {
let positionSlow = (e.pageX - window.innerWidth / 2) * 0.1;
let positionFast = (e.pageX - window.innerWidth / 2) * 0.2;
gsap.to(".spanSlow", {duration: 0.4, x: positionSlow});
gsap.to(".spanFast", {duration: 0.4, x: -positionFast});
gsap.to(".mouse__cursor", {duration: 0.3, left: e.pageX - 5, top: e.pageY - 5});
}
window.addEventListener("mousemove", mouseMove);
// ํ
์คํธ ์์ ๋ง์ฐ์ค ์ปค์ ์ฌ๋ผ์์ ๋ ์ปค์ ํฌ๊ธฐ 5๋ฐฐ๋ก ํค์ฐ๊ธฐ
const text = document.querySelectorAll(".spanSlow");
const text2 = document.querySelectorAll(".spanFast");
text.forEach((e) => {
e.addEventListener("mouseenter", () => {
document.querySelector(".mouse__cursor").classList.add("active");
});
e.addEventListener("mouseleave", () => {
document.querySelector(".mouse__cursor").classList.remove("active");
});
});
text2.forEach((e) => {
e.addEventListener("mouseenter", () => {
document.querySelector(".mouse__cursor").classList.add("active");
});
e.addEventListener("mouseleave", () => {
document.querySelector(".mouse__cursor").classList.remove("active");
});
});
</script>
๊ฒฐ๊ณผ
'Effect > Mouse Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 05 - ๊ธฐ์ธ๊ธฐ ํจ๊ณผ / ๊ธ์จ ๋ฐ์ ํจ๊ณผ (3) | 2022.09.28 |
---|---|
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 04 - ์ด๋ฏธ์ง ํจ๊ณผ (5) | 2022.09.22 |
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 03 - ์กฐ๋ช ํจ๊ณผ (4) | 2022.09.22 |
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 02 - GSAP (2) | 2022.09.18 |
[Mouse Effect] ๋ง์ฐ์ค ์ดํํธ 01 (6) | 2022.09.05 |
๋๊ธ