반응형
mouseEffect06
마우스 이펙트06번 - 텍스트 효과 입니다. 마우스를 따라서 텍스트가 입체적으로 좌, 우로 움직이는 효과를 주었습니다.
HTML
mouse__text영역에 4개의 line 영역을 생성하여 slow, fast 2가지로 나누어주었습니다.
동일한 문장을 2개씩 만든 이유는 좌, 우로 나누어 거울 같은 효과를 유도했습니다.
<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"><em class="style1">Dreams</em> are</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanSlow"><em class="style1">Dreams</em> are</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanFast">tomorrow's <em class="style1">reality.</em></span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanFast">tomorrow's <em class="style1">reality.</em></span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanSlow"><em class="style1">꿈은</em> 내일의</span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanSlow"><em class="style1">꿈은</em> 내일의</span>
</div>
</div>
</div>
<div class="line">
<div class="left">
<div class="spanWrap">
<span class="spanFast"><em class="style1">현실이다.</em></span>
</div>
</div>
<div class="right">
<div class="spanWrap">
<span class="spanFast"><em class="style1">현실이다.</em></span>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- //main -->
CSS
이미지 중앙 정렬 후 명언글에 기울기 효과와 영역을 설정합니다. 추가적으로 마우스 이벤트를 위한 CSS도 설정해줍니다.
/* 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;
font-weight: 800;
}
.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;
transition: transform 0.3s;
}
.mouse__cursor.style1 {
transform: scale(5);
mix-blend-mode: difference;
}
JAVASCRIPT
positionSlow, positionFast 마우스 이동에 따라 텍스트가 움직일 속도를 설정합니다.
gsap로 부드러운 이동과 커서의 중앙부를 정렬 후 이벤트를 실행합니다.
명언에 중요 단어에 em태그를 주어 em태그에 mouseenter, mouseleave시 이벤트를 부여합니다.
const cursor = document.querySelector(".mouse__cursor");
const em = document.querySelectorAll(".mouse__text em");
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 - 10, top: e.pageY - 10 });
};
window.addEventListener("mousemove", mouseMove);
em.forEach((em) => {
em.addEventListener("mouseenter", () => {
cursor.classList.add("style1");
});
em.addEventListener("mouseleave", () => {
cursor.classList.remove("style1");
});
});
반응형
'Effect' 카테고리의 다른 글
SearchEffect05 (0) | 2022.09.30 |
---|---|
parallax Effect06 (0) | 2022.09.30 |
mouseEffect05 (11) | 2022.09.28 |
SearchEffect04 (3) | 2022.09.28 |
mouseEffect04 (11) | 2022.09.22 |
댓글