728x90
반응형
마우스 이펙트04 : 이미지 효과
마우스 이펙트는 마우스 커서 해당위치에 커서대신 다양한 효과를 주거나 요소에 위치에서 다양한 변화를 주는 효과입니다.
CSS
css로 커서의 모양과 해당 요소 위에서 애니메이션을 주었습니다.
body::after {
background-color: rgba(0, 0, 0, 0.7);
}
/* mouseType */
.mouse__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
color: #fff;
overflow: hidden;
}
.mouse__wrap figure {
width: 50vw;
height: 50vh;
position: relative;
transition: transform 500ms ease;
overflow: hidden;
cursor: none;
}
.mouse__wrap figure:hover {
transform: scale(1.025);
}
.mouse__wrap figure img {
position: absolute;
left: -5%;
top: -5%;
width: 100%;
height: 100%;
object-fit: cover; /*background position같은 느낌*/
}
.mouse__wrap figure figcaption {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
font-size: 20px;
white-space: nowrap;
line-height: 1.4;
font-weight: 500;
}
.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;
}
HTML
html은 명언에 글자마다 다른 스타일의 클래스를 부여하여 다른 애니메이션을 줄 수 있도록 만들었습니다.
<main id="main">
<section id="mouseType">
<div class="mouse__cursor"></div>
<div class="mouse__wrap">
<figure>
<img src="../../assets/img/effect_bg_17@2x.jpg" alt="이미지">
<figcaption>
<p>It does not matter how slowly you go as long as you do not stop.</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>
Javascript
가운데 이미지가 마우스의위치에 따라 반대로 움직이도록 만들었습니다.
아래의 설명을 보며 같이 이해해보는것 좋을 거 같습니다.
const cursor = document.querySelector(".mouse__cursor")
const cursorRect = cursor.getBoundingClientRect();
document.querySelector(".mouse__wrap figure").addEventListener("mousemove", (e) => {
//커서
gsap.to(cursor, {
duration: .5,
left: e.pageX - cursorRect.width/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 모니터크기를 줄여야만 줄어듬
console.log( window.screen.width)
//마우스 좌표값 가운데로 초기화
//전체 길이/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 +"px," +centerPageY/20 +"px)"
gsap.to(imgMove, {
duration: 0.3,
x: centerPageX/20,
y: centerPageY/20,
});
//출력
document.querySelector(".m document.querySelector(".mousePageY").textContent = mousePageY;
document.querySelector(".centerPageX").textContent = centerPageX;
document.querySelector(".centerPageY").textContent = centerPageY;ousePageX").textContent = mousePageX;
});
설명
결과
반응형
'Effect' 카테고리의 다른 글
searchEffect04 (2) | 2022.09.29 |
---|---|
마우스 이펙트 : 기울기 효과/ 반전효과 (2) | 2022.09.29 |
마우스 이펙트03 : 조명 효과 (2) | 2022.09.23 |
마우스 이펙트02 - 마우스 따라다니기(GSAP) (1) | 2022.09.22 |
마우스 이펙트01 - 마우스 따라다니기 (1) | 2022.09.22 |