반응형
결과물
- 배율 0.25 추천
See the Pen Untitled by youngwan2 (@youngwan2) on CodePen.
HTML 코드
<!-- 모달 컨테이너 -->
<article class="modal_con">
<!-- 모달 내 콘텐츠 컨테이너 -->
<div class="modal_content">
<div class="title_con">
<h2 id="question">성인 이신가요?</h2>
</div>
<div class="btn_con">
<button id="yes">맞습니다.</button>
<span></span>
<button id="no">아닙니다.</button>
</div>
</div>
</article>
<!-- 마우스 포인터 -->
<article id="mouse_pointer"></article>
CSS 코드
* {
margin: 0;
padding: 0;
color: white;
cursor: none;
}
body {
background: linear-gradient(0deg, rgb(127, 131, 204), rgb(132, 33, 74));
position: relative;
width: 100%;
height: 100vh;
overflow: hidden;
}
/* 모달창 전체 컨테이너 */
.modal_con {
position: relative;
border-radius: 5px;
width: 400px;
height: 200px;
position: absolute;
left: 50%;
top: 50%;
translate: -50% -50%;
justify-content: center;
flex-direction: column;
background-color: transparent;
border: 2px solid white;
}
/* 성인이신가요를 감싼 컨테이너 */
.title_con {
padding-top: 1.8em;
width: 100%;
border-bottom: 2px ridge rgb(255, 255, 255);
border-radius: 10px;
}
/* title */
#question {
text-align: center;
padding-bottom: 2rem;
}
/* 버튼 컨테이너 */
.btn_con {
position: absolute;
display: flex;
width: 100%;
text-align: center;
height: 100px;
align-items: center;
justify-content: center;
}
/* 버튼 사이에 선 */
.btn_con span {
text-align: center;
height: 100%;
border: 1px solid rgb(255, 255, 255);
}
/* 맞습니다. 아닙니다 버튼 */
#yes,
#no {
position: relative;
background-color: transparent;
font-size: 1.2rem;
height: 30%;
font-weight: 600;
border: hidden;
height: 100%;
width: 150px;
margin: 0 20px 0 20px;
border-radius: 50%;
}
/* :is( ) 를 사용하면 ()안의 모든 태그에 동일한 가상요소,의사 클래스 지정가능 */
:is(#yes, #no):hover {
color: rgb(232, 244, 104);
border-radius: 50%;
text-transform: lowercase;
}
/* 마우스 포인터 */
#mouse_pointer {
transition: 0.5s scale;
position: absolute;
background: linear-gradient(90deg, rgb(255, 255, 255), rgb(83, 152, 221));
width: 100px;
box-shadow: 1px 1px 15px powderblue;
height: 100px;
top: 0;
border-radius: 50%;
z-index: -1;
}
JS 코드
(참고할 점)
mousenter 와 비슷한 기능을 하는 mouseover 가 있고, mouseleave와 비슷한 기능을 하는 mouseout 이라는 마우스 이벤트가 있다. mouseenter와 mouseleave 는 대상 태그 자체에만 이벤트가 적용되지만,
mouseover 와 mouseout은 대상 태그 내에 존재하는 자식 태그들 까지 이벤트가 적용되므로 사용 시 주의할 필요가 있다.
(() => {
const mouse = document.getElementById("mouse_pointer");
const modal = document.querySelector(".modal_con");
// 마우스가 이동할 때 마다 계속 실행한다.
function mouseFunc(e) {
const X = e.clientX - mouse.offsetWidth / 2;
const Y = e.clientY - mouse.offsetHeight / 2;
mouse.style.translate = `${X}px ${Y}px`;
}
window.addEventListener("resize", mouseFunc);
// 마우스가 모달창에 들어오는 순간 1번 실행한다.
function yesFunc() {
mouse.style.scale = "0.5";
console.log("실행중");
}
// 마우스가 모달창에서 나가는 순간 1번 실행한다.
function noFunc() {
mouse.style.scale = "1.1";
console.log("종료");
}
window.addEventListener("mousemove", mouseFunc);
// mouseenter는 마우스가 대상 영역과 겹치는 순간 1번 콜백함수를 호출한다.
modal.addEventListener("mouseenter", yesFunc);
//mouseleave는 마우스가 대상 영역을 나가는 순간 1번 콜백함수를 호출한다.
modal.addEventListener("mouseleave", noFunc);
})();
최종 결과물 이미지
반응형
'자바스크립트' 카테고리의 다른 글
[js] 우주선이 지나가는 진행바(프로그래스바) (0) | 2023.02.24 |
---|---|
[js] 자바스크립트에서 가속도 더하는 공식 및 디바이스 기울기 이벤트/USERAgent/ (0) | 2023.02.23 |
[js] 브라우저 화면의 중간값을 구하기(중심축을 이용한 애니메이션) (0) | 2023.02.22 |
[js] 간단한 마우스 커서 애니메이션? 만들기 (0) | 2023.02.22 |
[간단정리js] 자바스크립트 타입검사 시 == 연산자 대신 === 사용하기 (0) | 2023.02.21 |