마우스 효과
마우스 이펙트 - 이미지 효과
가운데 이미지를 하나 더 넣어서 마우스 움직일때 가운데 이미지만 조금 움직여 이질감(?)이 느껴지는 효과를 넣어보겠습니다.
결과
HTML 작성
커서 한개와, 가운데 이미지를 넣을것이므로 figure태그를 만들어줍니다.
소스 보기
<main id="main">
<section id="mouseType">
<div class="mouse__cursor"></div>
<div class="mouse__wrap">
<figure>
<img src="../assets/img/effect_bg14.jpg" alt="이미지">
<figcaption>
<p>The present and the future are somehow connected.</p>
<p>현재와 미래는 어떻게든 연결되어 있다.</p>
</figcaption>
</figure>
</div>
</section>
</main>
CSS 작성
이미지를 정가운데에 만들어줍니다.
소스 보기
/* mouseType */
.mouse__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #fff;
overflow: hidden;
}
.mouse__wrap figure {
width: 50vw;
height: 50vh;
position: relative;
overflow: hidden;
transition: transform 500ms ease;
cursor: none;
}
.mouse__wrap figure:hover {
transform: scale(1.025);
}
.mouse__wrap figure img {
position: absolute;
left: -5%;
top: -5%;
width: 110%;
height: 110%;
object-fit: cover;
}
.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: 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;
}
JS 작성
원을 마우스커서에 따라다니게 만들고 커서의 기준을 화면의 정가운데로 잡아줍니다. 만든 원 커서는 안쪽 사진에서만 움직이도록 만들고 바깥쪽에선 원래 커서가 보이도록 만듭니다. js를 이용해 만들어주니 부드러움이 덜 한거같아서 gsap로 작업하였습니다. 자세한 설명은 주석표시를 확인해주시기 바랍니다.
<script src="../assets/js/gsap.min.js"></script>
<script>
document.querySelector(".mouse__wrap figure").addEventListener("mousemove", (e)=>{
//커서
gsap.to(cursor, {
duration: .2,
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.window.screen.width //1920 브라우저 크기가 줄어들어도 감소X : 화면 크기
// 마우스 좌표 값 가운데로 초기화
// 전체 길이/2 - 마우스 좌표값 == 0
let centerPageX = window.innerWidth/2 - mousePageX; //좌표값 X축 기준을 0으로 만들기 위해서 (전체길이/2 - 마우스좌표값) == 0 을 기준으로 만들었습니다.
let centerPageY = window.innerHeight/2 - mousePageY;
// 이미지 움직이기
const imgMove = document.querySelector(".mouse__wrap figure img");
// imgMove.style.transform = "translate("+ centerPageX/20 +"px, "+ centerPageY/20 +"px)"; //가운데 0,0를 기준으로 이미지가 마우스값만큼 움직이도록 설정
// js사용하면 부드러움이 부족해서 gsap 사용!!
gsap.to(imgMove, {
duration: 0.3,
x: centerPageX/20,
y: centerPageY/20
})
// 출력
document.querySelector(".mousePageX").textContent = mousePageX;
document.querySelector(".mousePageY").textContent = mousePageY;
document.querySelector(".centerPageX").textContent = centerPageX;
document.querySelector(".centerPageY").textContent = centerPageY;
});
</script>
'Javascript_Effect' 카테고리의 다른 글
마우스 이펙트 - 기울기 효과 글씨 반전 효과 (10) | 2022.09.28 |
---|---|
Search Effect04 - find() 사용 (7) | 2022.09.28 |
마우스 이펙트 - 조명 효과 (5) | 2022.09.22 |
패럴랙스 이펙트 - 이질감 효과 (8) | 2022.09.20 |
슬라이드 이펙트 - 이미지 슬라이드(버튼) (3) | 2022.09.18 |
댓글