마우스 이펙트 - 조명효과
마우스가 움직이면서, 뒤에 있는 어두운 배경에 밝게 조명을 비추는 듯한 효과를 만들어봅시다.
html
커서 하나가 움직이면서 커서가 위치하는 곳을 밝게 보이는 것처럼 효과를 주기 위해서 mouse__cursor 커서를 만들어줍니다.
코드보기
<main id="main">
<section id="mouseType">
<div class="mouse__cursor"></div>
<div class="mouse__wrap">
<p>The <span>gratification</span> comes in the <span>doing</span>, not in the results.
</p>
<p><span>만족</span>은 결과가 아니라 <span>과정</span>에서 온다.</p>
</div>
</section>
</main>
css
커서의 움직임에 따른 효과를 주는 작업을 진행합니다. 커서 안에 뒤의 배경 이미지와 같은 이미지를 넣어줍니다. background-size: cover;, background-position: center;를 사용하여 이미지의 위치를 잡아줍니다. background-attachment: fixed;를 사용하여 배경 이미지의 위치를 고정시켜 줍니다.
코드보기
/* mouseType */
.mouse__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #000;
overflow: hidden;
cursor: none;
}
.mouse__wrap p {
font-size: 2vw;
line-height: 2;
font-weight: 300;
}
.mouse__wrap p:last-child {
font-size: 3vw;
font-weight: 300;
}
.mouse__wrap p span {
border-bottom: 0.15vw dashed blue;
color: blue;
}
@media (max-width: 800px) {
.mouse__wrap p {
padding: 0 20px;
font-size: 24px;
line-height: 1.5;
text-align: center;
margin-bottom: 10px;
}
.mouse__wrap p:last-child {
font-size: 40px;
line-height: 1.5;
text-align: center;
word-break: keep-all;
}
}
.mouse__cursor {
position: absolute;
left: 0;
top: 0;
width: 200px;
height: 200px;
z-index: -1;
border-radius: 50%;
background-image: url(../assets/img/effect_bg18@2x-min.jpg);
background-size: cover;
background-position: center;
background-attachment: fixed;
border: 5px solid #fff;
}
js
커서의 가로, 세로 값 구하기. client는 보더 값을 제외하고, offset은 보더값을 포함합니다.
const circleW = cursor.offsetWidth;
const circleH = cursor.offsetHeight;
const circle2 = cursor.clientWidth;을 이용해서 구할 수 있습니다.
getBoundingClientRect를 이용하면 페이지의 위치 값들을 구할 수 있습니다. 전체 페이지의 값을 구하고 반을 나눠서 위치를 잡는..
다양한 위치 값을 구할 수 있으며, left: e.pageX - circle.width / 2, top: e.pageY - circle.height / 2로 커서의 위치를 중앙으로 오도록
잡아줍니다. 커서도 반을 나눠서 위치를 잡기 위해서. 중앙을 잡아줍니다.
const cursor = document.querySelector(".mouse__cursor");
// const circleW = cursor.offsetWidth; //200
// const circleH = cursor.offsetHeight; //200
// const circle2 = cursor.clientWidth; //190 : 보더값 제외
const circle = cursor.getBoundingClientRect();
console.log(circle);
// const DOMRect = {
// x: 0,
// y: 0,
// bottom: 200,
// height: 200,
// left: 0,
// right: 200,
// top: 0,
// width: 200
// }
window.addEventListener("mousemove", (e) => {
gsap.to(cursor, {
duration: 0.5,
left: e.pageX - circle.width / 2,
top: e.pageY - circle.height / 2,
});
});
'Effect' 카테고리의 다른 글
mouseEffect05 (4) | 2022.09.28 |
---|---|
mouseEffect04 (5) | 2022.09.22 |
parallaxEffect05 (2) | 2022.09.20 |
sliderEffect04 (3) | 2022.09.16 |
parallaxEffect04 (4) | 2022.09.16 |