커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
모달
1시간만에 크리스마스 디데이 캘린더 만들기 v0
1주차
북마크
j*****7
댓글
4
추천
0
조회수
18
조회수
18
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


모달이 안떠요






작성한 코드 및 에러 메세지

html코드 <html lang="en">


<head>

 <meta charset="UTF-8">

 <meta name="viewport" content="width=device-width, initial-scale=1.0">

 <meta property="og:type" content="website">

 <meta property="og:url" content="https://grayson-choi.github.io/advent_calendar/">

 <meta property="og:title" content="스파르타코딩클럽 크리스마스 디데이 캘린더">

 <meta property="og:image" content="image/OGimage.png">

 <meta property="og:description" content="크리스마스까지 하루가 기다려지는 즐거움, 크리스마스 디데이 캘린더를 함께 만들어봐요!">

 <meta property="og:site_name" content="SCC Advent Calendar">

 <meta property="og:locale" content="en_US">

 <meta property="og:image:width" content="1200">

 <meta property="og:image:height" content="630">

 <title>Sparta Advend Calendar 2023</title>

 <link rel="stylesheet" href="index.css">

 <link rel="stylesheet" href="snow.css">

 <link rel="stylesheet" href="share.css">

</head>


<body>

 <!-- 이 곳에 뼈대 코드를 입력! -->

 <div class="snow-wrap">

  <div></div>

 </div>

 <section class="grid-1">

  <div class="title flex-col item-baseline">

   <img src="image/merry.png">

  </div>

  <div class="day-1">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">1</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-2">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">2</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-3">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">3</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-4">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">4</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-5">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">5</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-6">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">6</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-7">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">7</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-8">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">8</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-9">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">9</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-10">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">10</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-11">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">11</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-12">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">12</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-13">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">13</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-14">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">14</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-15">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">15</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-16">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">16</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-17">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">17</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-18">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">18</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-19">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">19</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-20">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">20</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-21">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">21</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-22">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">22</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-23">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">23</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

  <div class="day-24">

   <label>

    <input type="checkbox">

    <div class="door">

     <div class="front">

      <span class="date-num">24</span>

     </div>

     <div class="back"></div>

    </div>


   </label>

  </div>

 </section>

 <footer>

  <div class="flex-row">

   </a></button>

  </div>

 </footer>

 <script="index.js">

 </script>

  </script>

</body>


</html>













js코드 // 모달을 생성하고 설정하는 함수

function showModal(imageUrl, text) {

 // 기존에 모달이 있다면 제거합니다.

 const existingModal = document.querySelector('.modal');

 if (existingModal) {

  existingModal.remove();

 }


 // 모달 요소를 생성합니다.

 const modal = document.createElement('div');

 modal.className = 'modal hidden';


 // 모달 내용을 담는 컨테이너를 생성합니다.

 const modalContent = document.createElement('div');

 modalContent.className = 'modal-content zoomIn';


 // 이미지를 표시할 요소를 생성합니다.

 const image = document.createElement('div');

 image.style.backgroundImage = `url(${imageUrl})`;

 image.alt = 'Door Image';

 image.style.width = '100%';

 image.style.height = '211px';


 // 텍스트를 표시할 요소를 생성합니다.

 const textElement = document.createElement('p');

 textElement.textContent = text;


 // 모달 컨텐트에 이미지와 텍스트를 추가합니다.

 modalContent.appendChild(image);

 modalContent.appendChild(textElement);


 // 모달에 모달 컨텐트를 추가합니다.

 modal.appendChild(modalContent);


 // 모달에 클릭 이벤트 리스너를 추가하여 닫을 수 있도록 합니다.

 modal.addEventListener('click', () => {

  modal.remove(); // 모달을 문서에서 제거합니다.

 });


 // 문서에 모달을 추가합니다.

 document.body.appendChild(modal);

 // 모달을 표시합니다.

 setTimeout(() => modal.classList.remove('hidden'), 0);

}


const modalMessageList = [

 { "number": 1, "message": "행복의 계절, 모두가 함께하는 24일!" },

 { "number": 2, "message": "이 12월, 행복한 순간이 우리를 감싸네요." },

 { "number": 3, "message": "다 같이 즐겁게 보내는 24일, 행복이 가득합니다!" },

 { "number": 4, "message": "12월의 특별함을 모두와 함께 나누어요." },

 { "number": 5, "message": "각자의 작은 행복이 모여 만드는 특별한 24일!" },

 { "number": 6, "message": "행복이라는 이름의 캘린더, 모두에게 열려 있어요." },

 { "number": 7, "message": "함께 하는 즐거움, 24일 동안 계속되길 바랍니다." },

 { "number": 8, "message": "12월은 행복한 순간들이 가득한 달이에요." },

 { "number": 9, "message": "우리 모두에게 찾아온 특별한 행복의 계절!" },

 { "number": 10, "message": "매일 매일이 행복으로 가득찬 24일이 되길." },

 { "number": 11, "message": "12월, 행복이 가득한 당신과 나누는 소중한 시간." },

 { "number": 12, "message": "다 함께하는 24일, 행복이 여러 가지 모습으로 찾아올 거예요." },

 { "number": 13, "message": "행복의 파도가 모두에게 찾아오는 특별한 24일!" },

 { "number": 14, "message": "12월, 각자의 작은 행복이 모여 큰 기쁨이 되길." },

 { "number": 15, "message": "모두에게 행복이 넘치는 24일을 기대해봐요." },

 { "number": 16, "message": "12월의 특별한 순간, 행복이 퍼져나가길." },

 { "number": 17, "message": "모두에게 행복한 24일이 될 것을 기대합니다!" },

 { "number": 18, "message": "12월, 행복이 가득찬 마음으로 채워져 있는 시간." },

 { "number": 19, "message": "다양한 행복이 모여 하나로 뭉쳐지는 24일!" },

 { "number": 20, "message": "12월, 당신과 나누는 특별한 행복의 순간들." },

 { "number": 21, "message": "모두에게 다가오는 24일, 행복이 함께하기를!" },

 { "number": 22, "message": "12월의 행복한 기운이 모두를 감싸네요." },

 { "number": 23, "message": "다 함께하는 24일, 행복한 느낌이 가득할 거예요." },

 { "number": 24, "message": "12월, 모두에게 기쁨과 행복이 넘치는 달이에요." }

];


// 전역에서 한 번만 실행되도록 클릭 이벤트 리스너를 등록

const doors = document.querySelectorAll('.door');

doors.forEach((door, index) => {

 door.addEventListener('click', () => {

  // 상위 div의 class 번호를 찾아서 image url에 사용합니다

  const imageUrl = `image/card/card-${index + 1}.png`;


  // 'back' 클래스를 가진 요소를 찾아 스타일을 가져옵니다.

  const doorDiv = document.querySelector(`.day-${index + 1}`)

  const backDiv = doorDiv.querySelector(`.back`);


  const style = window.getComputedStyle(backDiv);

  const pTag = backDiv.querySelector('p')

  const text = modalMessageList[index]['message']


  // showModal 함수를 호출하여 모달을 표시합니다.

  showModal(imageUrl, text);

  // alert('이벤트 캘린더를 엽니다.');

 });

});


취소
 공유
취소
댓글 0
댓글 알림
나의얼굴