728x90
반응형
마우스 이펙트 - 텍스트 효과
마우스의 움직임에 따라 글자가 움직이고 마우스를 텍스트 위에 올리면 마우스 커서에 효과가 나타납니다.
html
글자를 왼쪽, 오른쪽에 같은 단어가 겹치면서 효과가 발생하기에 그에 따른 틀을 잡아줍니다.
코드보기
<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_bg11@2x-min.jpg" alt="">
</figure>
</div>
<div class="mouse__text">
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanSlow style">Pain Past</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanSlow style">Pain Past</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanFast style">is pleasure</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanFast style">is pleasure</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanSlow style">지나간 고통은</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanSlow style">지나간 고통은</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanFast style">쾌락이다.</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanFast style">쾌락이다.</span>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
css
transform: skew();를 이용하여 글자에 기울기 효과를 부여합니다. mix-blend-mode: difference;를 이용하여 커서가 올라갔을 때의 배경색과의 반전을 줍니다.
코드보기
/* 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;
font-size: 5px;
}
.mouse__cursor.style {
background-color: rgba(255, 255, 255, 0.9);
transform: scale(5);
mix-blend-mode: difference;
}
js
mouseMove의 움직임에 e=마우스 커서, 커서의 좌표값과 gsap를 이용해서는 마우스의 움직임에 따른 효과와 글자의 움직임에 대한 속도를 부여합니다. 커서가 글자에 올라갔을때 효과가 부여
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);
//마우스를 올렸을때 커서 커지는 효과. 글자에 클래스와 스타일을 추가하여 부여
const cursor = document.querySelector(".mouse__cursor");
document.querySelectorAll(".spanWrap span").forEach((span) => {
span.addEventListener("mouseover", () => {
cursor.classList.add("style");
});
span.addEventListener("mouseout", () => {
cursor.classList.remove("style");
});
});
728x90
반응형
'Effect' 카테고리의 다른 글
parallaxEffect07 (3) | 2022.10.10 |
---|---|
parallaxEffect06 (2) | 2022.09.29 |
searchEffect05 (2) | 2022.09.29 |
searchEffect04 (4) | 2022.09.28 |
mouseEffect05 (4) | 2022.09.28 |