반응형
<script>
consttriggers=document.querySelectorAll('.cool > li');
constbackground=document.querySelector('.dropdownBackground');
constnav=document.querySelector('.top');
function handleEnter() {
this.classList.add('trigger-enter');
setTimeout(() => this.classList.contains('trigger-enter') && this.classList.add('trigger-enter-active'), 150);
background.classList.add('open');
const dropdown = this.querySelector('.dropdown');
const dropdownCoords = dropdown.getBoundingClientRect();
const navCoords =nav.getBoundingClientRect();
const coords = {
height: dropdownCoords.height,
width: dropdownCoords.width,
top: dropdownCoords.top - navCoords.top,
left: dropdownCoords.left - navCoords.left
};
background.style.setProperty('width', `${coords.width}px`);
background.style.setProperty('height', `${coords.height}px`);
background.style.setProperty('transform', `translate(${coords.left}px, ${coords.top}px)`);
}
function handleLeave() {
this.classList.remove('trigger-enter', 'trigger-enter-active');
background.classList.remove('open');
}
triggers.forEach(trigger => trigger.addEventListener('mouseenter', handleEnter));
triggers.forEach(trigger => trigger.addEventListener('mouseleave', handleLeave));
</script>
마우스를 올리면 dropdown 방식으로 메뉴가 펼쳐지는 프로젝트이다.
홈페이지를 돌아다니다 보면 많이 보이는 방식인데 메뉴에 따라 크기도 알아서 바뀌는 모습을 볼 수있다.
반응형
'챌린지 > JavaScript 30일 챌린지' 카테고리의 다른 글
[JavaScript 30일 챌린지] : 28일차 (0) | 2022.02.24 |
---|---|
[JavaScript 30일 챌린지] : 27일차 (0) | 2022.02.23 |
[JavaScript 30일 챌린지] : 25일차 (0) | 2022.02.21 |
[JavaScript 30일 챌린지] : 24일차 (0) | 2022.02.20 |
[JavaScript 30일 챌린지] : 23일차 (0) | 2022.02.19 |
댓글