728x90
반응형
06. 마우스 이펙트 : 텍스트 효과
마우스 이펙트는 마우스 커서 해당위치에 커서대신 다양한 효과를 주거나 요소에 위치에서 다양한 변화를 주는 효과입니다.
CSS
중심에 글을 가운데를 기준으로 양쪽 부분만 남기고 겹치는 부분은 overflow:hidden을 사용하여 숨겼습니다.
왼쪽 글은 15deg정도 기울이고 색을 줬고 오른쪽은 -15deg로 기울여서 작업하였습니다.
/* mouseType */
.mouse__wrap {
color: #fff;
width: 100%;
height: 100vh;
}
.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:hover .mouse__cursor {
transform: scale(2);
}
.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;
/*반전효과*/
}
.mouse__cursor.big {
transform: scale(10);
}
HTML
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_bg_18@2x.jpg" alt="">
</figure>
</div>
<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>
</section>
</main>
Javascript
마우스의 움직임에 따라 움직이는 작업은 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")
const spanWrap = document.querySelectorAll(".line .spanWrap span").forEach((e,i) => {
let attr = e.getAttribute("class");
e.addEventListener("mouseover", () => {
cursor.classList.add("big");
});
e.addEventListener("mouseout", () => {
cursor.classList.remove("big");
});
})
결과
반응형
'Effect' 카테고리의 다른 글
searchEffect05 (3) | 2022.09.30 |
---|---|
패럴랙스 이펙트 - 텍스트 효과 (2) | 2022.09.30 |
searchEffect04 (2) | 2022.09.29 |
마우스 이펙트 : 기울기 효과/ 반전효과 (2) | 2022.09.29 |
마우스 이펙트04 : 이미지 효과 (1) | 2022.09.23 |