728x90
마우스 효과04
자바스크립트를 이용하여 마우스 효과를 만들어 보겠습니다. 이미지 안에서만 커서 모양이 바뀌고, 마우스를 움직일 때 마우스 방향에 따라 이미지가 움직입니다.
자바스크립트
마우스 효과를 만들기 위한 자바스크립트 작성법입니다. 이번에도 gsap를 이용하여 효과를 주었습니다.
const cursor = document.querySelector(".mouse__cursor")
const cursorRect = cursor.getBoundingClientRect(); //커서의 너비/높이값 구하기
document.querySelector(".mouse__wrap figure").addEventListener("mousemove", (e) => { //가운데 이미지 영역에서 마우스를 움직였을 때
//커서
gsap.to(cursor, {
duration: .2, //애니메이션 지속시간. 지속시간이 누적되기 때문에 마우스가 계속 따라오는 것처럼 보임
left: e.pageX - cursorRect.width / 2, //커서가 가운데에 올 수 있게 /2
top: e.pageY - cursorRect.height / 2
});
// 마우스 좌표 값
let mousePageX = e.pageX;
let mousePageY = e.pageY;
// 전체 가로 값
// window.innerWidth; //1920 : 브라우저 크기
// window.outerWidth; //1920 : 브라우저 크기(스크롤바 포함)
// window.screen.width //1920 : 화면 크기
// 마우스 좌표 값 가운데로 초기화 하기 위해 전체 길이/2 - 마우스 좌표값 == 0
let centerPageX = window.innerWidth / 2 - mousePageX;
let centerPageY = window.innerHeight / 2 - mousePageY;
// 이미지 움직이기
const imgMove = document.querySelector(".mouse__wrap figure img");
// imgMove.style.transform = "translate("+ centerPageX/20 +", "+ centerPageY/20 +")";
gsap.to(imgMove, {
duration: 0.3,
x: centerPageX / 20, //이미지가 버벅거리며 움직이지 않고 부드럽게 움직일 수 있음
y: centerPageY / 20
});
// 출력 -> mouse__info에 mousePageX, mousePageY, centerPageX, centerPageY값 입력
document.querySelector(".mousePageX").textContent = mousePageX;
document.querySelector(".mousePageY").textContent = mousePageY;
document.querySelector(".centerPageX").textContent = centerPageX;
document.querySelector(".centerPageY").textContent = centerPageY;
});
HTML
마우스 효과를 만들기 위한 html 작성법입니다. <div class="mouse__wrap"> 으로 가운데 이미지 영역을 잡아줍니다. figcaption 태그는 부모 <figure> 요소가 포함하는 다른 콘텐츠에 대한 설명 혹은 범례를 나타냅니다.
<main id="main">
<section id="mouseType">
<div class="mouse__cursor"></div>
<div class="mouse__wrap">
<figure>
<img src="../assets/img/effect_bg13-min.jpg" alt="이미지">
<figcaption>
<p>Time is flying never to return.</p>
<p>시간은 흘러 다시 돌아오지 않는다.</p>
</figcaption>
</figure>
</div>
</section>
<div class="mouse__info">
<ul>
<li>mousePageX : <span class="mousePageX">0</span>px</li>
<li>mousePageY : <span class="mousePageY">0</span>px</li>
<li>centerPageX : <span class="centerPageX">0</span>px</li>
<li>centerPageY : <span class="centerPageY">0</span>px</li>
</ul>
</div>
</main>
<!-- main -->
CSS
마우스 효과를 만들기 위한 css 작성법입니다. object-fit 속성은 이미지나 비디오 요소와 같은 컨텐츠 크기를 어떤 방식으로 조절해 맞출지를 결정합니다. 여기서는 cover를 사용했는데요. cover는 대체 콘텐츠의 가로세로비를 유지하면서, 요소 콘텐츠 박스를 가득 채웁니다.
user-select : 사용자가 텍스트를 선택할 수 있는지 여부를 제어
pointer-events : 마우스 포인터 이벤트의 반응을 정의
pointer-events : 마우스 포인터 이벤트의 반응을 정의
/* mouseType */
.mouse__wrap {
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #fff;
overflow: hidden;
}
.mouse__wrap figure {
width: 50vw;
height: 50vh;
position: relative;
overflow: hidden;
transition: transform 500ms ease;
cursor: none;
}
.mouse__wrap figure img {
position: absolute;
left: -5%;
top: -5%;
width: 110%;
height: 110%;
object-fit: cover;
}
.mouse__wrap figure:hover {
transform: scale(1.025);
}
.mouse__wrap figure figcaption {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
font-size: 18px;
white-space: nowrap;
line-height: 1.4;
font-weight: 300;
}
.mouse__cursor {
position: absolute;
left: 0;
top: 0;
width: 20px;
height: 20px;
background: #fff;
border-radius: 50%;
z-index: 1000;
user-select: none;
pointer-events: none;
}
.mouse__info {
position: absolute;
left: 20px;
bottom: 10px;
font-size: 14px;
line-height: 1.6;
color: #fff;
}
728x90
반응형
'JAVASCRIPT Effect' 카테고리의 다른 글
SEARCH Effect 04 (4) | 2022.09.28 |
---|---|
Mouse Effect 05 (3) | 2022.09.28 |
Mouse Effect 03 (1) | 2022.09.22 |
PARALLAX Effect 05 (3) | 2022.09.20 |
PARALLAX Effect 04 (1) | 2022.09.18 |
댓글