Success is walking from failure to failure with no loss of enthusiasm.
성공이란 열정을 잃지 않고 실패에서 실패로 걸어가는 것이다.
Success is walking from failure to failure with no loss of enthusiasm.
성공이란 열정을 잃지 않고 실패에서 실패로 걸어가는 것이다.
마우스 이펙트 - 이미지 효과2
<main>
<section id="mouseType03">
<div class="cursor"></div>
<div class="mouse__wrap">
<div class="mouse__img">
<figure>
<img src="img/img9.jpg" alt="이미지">
</figure>
<figcaption>
<p>Success is walking from failure to failure with no loss of enthusiasm.</p>
<p>성공이란 열정을 잃지 않고 실패에서 실패로 걸어가는 것이다.</p>
</figcaption>
</div>
</div>
</section>
</main>
body::before {
background: rgba(5, 36, 70, 0.87)
}
.mouse__wrap {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #fff;
width: 100%;
height: 100vh;
overflow: hidden;
cursor: none;
}
.mouse__img {
position: relative;
text-align: center;
transform: perspective(600px) rotateX(0deg) rotateY(0deg);
transform-style: preserve-3d; /* 3d 효과(공간의 깊이:perspective)를 표현하기 위한 지정*/
will-change: transform; /*값이 변경될 속성에 대한 힌트를 미리 지정해주는 것, 더 부드러운 이벤트를 구사*/
transition: all 0.1s;
}
.mouse__img figure {
width: 50vw;
position: relative;
}
.mouse__img figure::before { /*그림자 효과*/
content: '';
position: absolute;
left: 5%;
bottom: -30px;
width: 90%;
height: 40px;
background: url(img/img9.jpg) center center no-repeat;
background-size: 100% 40px;
filter: blur(15px) grayscale(50%);
opacity: 0.6;
z-index: -1;
}
.mouse__img figcaption {
position: absolute;
left: 50%;
top: 50%;
font-size: 1vw;
white-space: nowrap;
line-height: 1.6;
background: rgba(0, 0, 0, 0.5);
padding: 1vw 2vw;
transform: translate3d(-50%, -50%, 150px);
}
.cursor {
position: absolute;
left: 0;
top: 0;
width: 100px;
height: 100px;
background: #fff;
border-radius: 50%;
z-index: 1000;
user-select: none;
pointer-events: none;
mix-blend-mode: difference;
}
const circle = document.querySelector(".cursor").getBoundingClientRect();
function mouseMove(e) {
//마우스 좌표 값
let mousePageX = e.pageX;
let mousePageY = e.pageY;
//마우스 좌표 기준점을 가운데로 변경
let centerPageX = window.innerWidth / 2 - mousePageX;
let centerPageY = window.innerHeight / 2 - mousePageY;
//X: 최솟값은 -800 최댓값은 800, Y: 최솟값은 -300, 최댓값은 300
let maxPageX = Math.max(-800, Math.min(800, centerPageX));
let maxPageY = Math.max(-300, Math.min(300, centerPageY));
//각도 줄이는 설정
let anlexpageX = maxPageX * 0.12;
let anlexpageY = maxPageY * 0.12;
//부드럽게 설정
let softPageX = 0,
softPageY = 0;
softPageX += (anlexpageX - softPageX) * 0.4;
softPageY += (anlexpageY - softPageY) * 0.4;
//부드럽게 설정 10-->30
// let softPageX = 0,
// softPageY = 0;
// softPageX = anlexpageX * 0.4;
// softPageY = anlexpageY * 0.4;
//div.cursor가 이동할 좌표 구하기(div.cursor가 마우스 좌표값 정 가운데에 오도록)
let circleWidth = mousePageX - circle.width / 2;
let circleHeight = mousePageY - circle.height / 2;
//이미지움직이기
//transform: rotateX(0deg) rotateY(0deg);
//.mouse__img의 transform을 바꿈 rotate값에 커서값을 반영.
const imgMove = document.querySelector(".mouse__img");
imgMove.style.transform = "perspective(600px) rotateX(" + softPageY + "deg) rotateY(" + -softPageX +
"deg)"; //속성값에 ;들어가면 안됨
//커서의 움직임을 부드럽게 해준다.
gsap.to(".cursor", {
duration: .3,
left: circleWidth,
top: circleHeight
});
//출력
document.querySelector(".mousePageX").textContent = mousePageX;
document.querySelector(".mousePageY").textContent = mousePageY;
document.querySelector(".centerPageX").textContent = centerPageX;
document.querySelector(".centerPageY").textContent = centerPageY;
}
document.addEventListener("mousemove", mouseMove);