За последние 24 часа нас посетили 16938 программистов и 1180 роботов. Сейчас ищут 1620 программистов ...

Кнопка закрыть для модального окна

Тема в разделе "JavaScript и AJAX", создана пользователем hunter0k, 17 июн 2023.

  1. hunter0k

    hunter0k Активный пользователь

    С нами с:
    15 мар 2016
    Сообщения:
    18
    Симпатии:
    0
    Здравствуйте, есть вот такое модальное окошко, к которому добавил оверлей, а кнопку закрыть чет не получается прикрутить. Помогите, пожалуйста сделать ее кликабельной.
    HTML:
    1.  
    2. <div class="accordion-item">
    3.       <div class="accordion-item__trigger">
    4.                <div class="modal__overlay"></div>
    5.                 Открыть
    6.        </div>
    7.        <div class="accordion-item__content">
    8.           <div class="modal_close">X</div>
    9.           <div class="modal_content">          
    10.              <h4>Профиль</h4>  
    11.               <p>Текст</p>
    12.            </div>          
    13.     </div>
    14. </div>
    15.  
    Код (CSS):
    1. .accordion-item {margin-bottom: 20px}
    2. .modal__overlay {
    3.     opacity: 0; visibility: hidden; position: fixed; top: 0; left: 0; cursor: auto; width: 100vw; height: 100vh;
    4.     background: rgb(0,0,0,.4); -webkit-transition: all 0.4s; -moz-transition: all 0.4s; transition: all 0.4s;
    5. }
    6. .modal_close {
    7.     position: absolute; top: 15px; right: 15px; font-size: 4em; color: grey; cursor: pointer; font-family: 'Comic Sans MS'; font-weight: normal;
    8.     transform: rotate(45deg); -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg);
    9.     transition: filter linear .2s;-moz-transition:filter linear .2s;-webkit-transition:filter linear .2s;-o-transition: filter linear .2s;
    10. }
    11. .modal_close:hover {-webkit-filter: brightness(110%)}
    12. .accordion-item__trigger {padding: 20px; border: 1px solid black;}
    13. .accordion-item__content {
    14.     position: fixed; top: 50%; left: 50%; min-height: 200px; max-height: 90%; width: 90%; max-width: 500px;
    15.     opacity: 0; visibility: hidden; overflow-y: auto; z-index: 3; text-align: center;
    16.     background: #E3EDE9; box-shadow: 0 0 0 6px rgba(0,0,0,.1); border: 2px solid #666; border-radius: 7px;
    17.     transition: 0.3s all; -webkit-transition: 0.3s all; -moz-transition: 0.3s all; -ms-transition: 0.3s all;
    18.     transform: translate(-50%, -200%); -webkit-transform: translate(-50%, -200%); -moz-transform: translate(-50%, -200%); -ms-transform: translate(-50%, -200%);
    19. }
    20.  
    21. .accordion-item--active .modal__overlay {opacity: 1; visibility: visible;}
    22. .accordion-item--active .accordion-item__trigger {background-color: #ccc;}
    23. .accordion-item--active .accordion-item__content {
    24.     opacity: 1; visibility: visible;
    25.     transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%);
    26. }
    Код (Javascript):
    1. document.querySelectorAll('.accordion-item__trigger').forEach((item) =>
    2.     item.addEventListener('click', () => {
    3.     const parent = item.parentNode;
    4.  
    5.     if (parent.classList.contains('accordion-item--active')) {
    6.         parent.classList.remove('accordion-item--active');
    7.     } else {
    8.         document
    9.             .querySelectorAll('.accordion-item')
    10.             .forEach((child) => child.classList.remove('accordion-item--active'))
    11.            
    12.         parent.classList.add('accordion-item--active');
    13.     }
    14. })
    15. )
     
  2. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    158
    Симпатии:
    41
    Адрес:
    Барнаул
    Код (Javascript):
    1.  
    2. const accordion = element => {
    3.     const close = el =>  el.classList.remove('accordion-item--active');
    4.  
    5.     const open = el => el.classList.add('accordion-item--active');
    6.  
    7.     const isActiveAccordion = el => el.classList.contains('accordion-item--active');
    8.  
    9.     const closeEvent = (element, event) => {
    10.         close(element);
    11.     };
    12.  
    13.     const openEvent = (element, event) => {
    14.         document.querySelectorAll('.accordion-item').forEach(item => closeEvent(item, event));
    15.         open(element);
    16.     };
    17.  
    18.     const clickAccordionItemEvent = (element, event) => {
    19.         isActiveAccordion(element) ? closeEvent(element, event) : openEvent(element, event)
    20.     };
    21.  
    22.     document.querySelectorAll(element).forEach(item => {
    23.             const parent = item.parentNode;
    24.  
    25.             parent.querySelectorAll('.modal_close')
    26.                 .forEach(closeBtn => closeBtn.addEventListener('click', closeEvent.bind(null, parent)));
    27.  
    28.             item.addEventListener('click', clickAccordionItemEvent.bind(null, parent));
    29.         }
    30.     )
    31.  
    32. };
    33.  
    34. accordion('.accordion-item__trigger')
     
    #2 Aleksandr.B, 17 июн 2023
    Последнее редактирование: 17 июн 2023
    hunter0k нравится это.
  3. hunter0k

    hunter0k Активный пользователь

    С нами с:
    15 мар 2016
    Сообщения:
    18
    Симпатии:
    0
    накодил то накодил)) спс большое