JAVASCRIPT/자바스크립트
mouseEffect05 - 이미지 효과2
(*ᴗ͈ˬᴗ͈)ꕤ*.゚
2022. 3. 8. 17:08
HTML 구성
<div class="mouse__wrap">
<div class="mouse__img">
<figure>
<img src="img/images22.jpg" alt="이미지">
</figure>
<figcaption>
<p>I will give you rest.</p>
<p>내가 너희를 쉬게 하리라.</p>
</figcaption>
</div>
</div>
.mouse__wrap > .mouse__img > figure > img
.mouse__wrap > .mouse__img > figcaption > p
CSS 구성
.mouse__img {
position: relative;
text-align: center;
transform: rotateX(0deg) rotateY(0deg);
transform-style: preserve-3d;
will-change: transform;
}
.mouse__img figure {
width: 50vw;
position: relative;
}
.mouse__img figure::before {
content: '';
position: absolute;
left: 5%; bottom: -40px;
width: 90%;
height: 40px;
background: url(img/images22.jpg) center center no-repeat;
background-size: 100% 40px;
filter: blur(15px);
opacity: 0.9;
z-index: -1;
}
.mouse__img figcaption {
position: absolute;
left: 50%; top: 50%;
font-size: 1.2vw;
white-space: nowrap;
line-height: 1.6;
background: rgb(0,0,0,0.2);
padding: 1vw 2vw;
transform: translate3d(-50%, -50%, 100px);
}
살펴 볼 CSS
1. .mouse__img
- transform-style: preserve-3d;
3d공간에서 표현 가능하다
- will-change: transform;
will-change 속성은 브라우저에게 무엇무엇을 할터이니 최적화 준비해라~ 라고 말하는 것이다
will-change를 통해 페이지의 반응성을 증가시킬 수 있다
참고로 너무 자주 사용하면 더욱 악영향을 미친다고 한다
2. .mouse__img figure::before
- 그림자 효과를 줬다
3. .mouse__img figcaption
- transform: translate3d(-50%, -50%, 100px);
세 번째 인자가 z축 방향으로 얼마나 떨어져있는지 설정하는 것이다
JS 구성
function mouseMove(e){
// 마우스 좌표 값
let mousePageX = e.pageX;
let mousePageY = e.pageY;
// 마우스 좌표 기준점을 가운데로 변경
let centerPageX = window.innerWidth/2 - mousePageX;
let centerPageY = window.innerHeight/2 - mousePageY;
//최댓값 최솟값 구하기
//최솟값은 -50, 최댓값은 50 설정
let maxPageX = Math.max(-1000, Math.min(1000,centerPageX));
let maxPageY = Math.max(-1000, Math.min(1000,centerPageY));
//각도 줄이는 설정
let anlexpageX = maxPageX * 0.12;
let anlexpageY = maxPageY * 0.12;
//마우스가 움직일 때, 이미지 움직임 값이 skip되지 않게 해주기
//부드럽게 설정 10---> 30
let softPageX = 0;
let softPageY = 0;
softPageX += (anlexpageX - softPageX) * 0.4;
softPageY += (anlexpageY - softPageY) * 0.4;
//transform: rotateX(0deg) rotateY(0deg);
const imgMove = document.querySelector(".mouse__img");
imgMove.style.transform = "perspective(600px) rotateX("+ -softPageY +"deg) rotateY("+ softPageX +"deg)";
}
//마우스 무브에 대한 이벤트 제공
document.addEventListener("mousemove", mouseMove);
링크
https://sungilryuu.github.io/webs_class/javascript/effect/mouseEffect05.html