728x90
먼저 template를 작성해준다.
style은 변수로 지정해준다.
<template>
<div class="circle" :style="circleStyle" />
</template>
다음으로 css를 작성해준다.
원하는 색에 원하는 크기로 작성해도 무방하다.
.circle {
position: fixed;
width: 20px;
height: 20px;
background-color: rgba(255, 255, 255, 0.5);
border-radius: 50%;
pointer-events: none; /* 동그라미가 클릭을 막지 않도록 설정 */
}
마지막으로 script를 작성해준다.
먼저, 동그라미의 위치를 저장할 반응형 변수를 생성해준다.
const circleStyle = ref({
top: '0px',
left: '0px',
transform: 'translate(-50%, -50%)',
})
다음으로 마우스를 움직이면 top과 left가 함께 움직이도록 해준다.
function handleMouseMove(event: MouseEvent) {
circleStyle.value.top = `${event.clientY}px`
circleStyle.value.left = `${event.clientX}px`
}
컴포넌트가 마운트되면 이벤트 리스너 추가되도록 해준다.
onMounted(() => {
window.addEventListener('mousemove', handleMouseMove)
})
마찬가지로 컴포넌트가 언마운트되기 전에 이벤트 리스너 제거되도록 해준다.
onBeforeUnmount(() => {
window.removeEventListener('mousemove', handleMouseMove)
})
이렇게 비교적 가벼운 컴포넌트를 생성해봤다!
728x90
반응형
'Front > Vue' 카테고리의 다른 글
7-segment 타이머 만들기 (1) | 2024.11.18 |
---|---|
비/눈 오는 효과 (0) | 2024.09.19 |
VUE3.0 흘러가는 텍스트 (1) | 2024.06.14 |
devExtreme 사용 중 만난 에러 (0) | 2024.01.16 |
Vue3.0 + Nuxt 프로젝트 진행 후 정리 (0) | 2023.11.22 |
댓글