IT/JavaScript
[javascript] 모달 클릭 이벤트 처리
밍띠이
2023. 12. 3. 18:56
반응형
버튼이 3개 있을 때,
버튼 세개에 전부 클릭 이벤트를 주고자 한다면 반복문을 이용해서 처리해 줄 수 있다.
app.js
const showModal = document.querySelectorAll('.show-modal');
const modal = document.querySelector('.modal');
const closeBtn = document.querySelector('.close-modal');
const overlay = document.querySelector('.overlay');
for (let i = 0; i < 3; i++) {
showModal[i].addEventListener('click', function () {
modal.classList.remove('hidden');
overlay.classList.remove('hidden');
});
}
closeBtn.addEventListener('click', function () {
modal.classList.add('hidden');
overlay.classList.add('hidden');
});
overlay.addEventListener('click', function () {
modal.classList.add('hidden');
overlay.classList.add('hidden');
});
해당 요소에 block, none 으로 처리하는 것 보다
modal 자체에 클래스를 주어
클래스를 add 하거나 remove 하는 형식으로 처리해주는 것이 깔끔하다.
style.css>
.hidden {
display: none;
}
index.html>
<div class="modal hidden"></div>
app. js 리펙토링
showedModal 과 hiddenModal 으로 기능을 나눠 호출 형식으로 리팩토링 가능하다.
'use strict';
const showModal = document.querySelectorAll('.show-modal');
const modal = document.querySelector('.modal');
const closeBtn = document.querySelector('.close-modal');
const overlay = document.querySelector('.overlay');
const showedModal = function () {
modal.classList.remove('hidden');
overlay.classList.remove('hidden');
};
const hiddenModal = function () {
modal.classList.add('hidden');
overlay.classList.add('hidden');
};
for (let i = 0; i < 3; i++) {
showModal[i].addEventListener('click', showedModal);
}
closeBtn.addEventListener('click', hiddenModal);
overlay.addEventListener('click', hiddenModal);
반응형