From 46df883cfdd3e37f493d24b4f2bdc3913e3d5b9e Mon Sep 17 00:00:00 2001 From: Kirill Pet Date: Tue, 8 Oct 2024 20:11:11 +0300 Subject: [PATCH] js modal --- assets/css/gp-style-core.css | 22 +++++-- assets/js/gp-main.js | 115 +++++++++++++++++++++++++---------- 2 files changed, 100 insertions(+), 37 deletions(-) diff --git a/assets/css/gp-style-core.css b/assets/css/gp-style-core.css index 825d9e2..1b2dccd 100644 --- a/assets/css/gp-style-core.css +++ b/assets/css/gp-style-core.css @@ -797,29 +797,41 @@ button{ background: rgba(0, 0, 0, 0.25); z-index: 200; + + opacity: 0; + transition: opacity .2s ease-out; + pointer-events: none; +} +.modal.active{ + opacity: 1; + pointer-events: auto; } .modal__aside{ position: fixed; top: 0; right: 0; - width: auto; + width: 0; height: 100%; overflow: hidden; + transition: width .4s ease-out; } .modal__item{ height: 100%; padding: 24px; - display: flex; - flex-direction: column; - justify-content: space-between; - background: var(--background-white); position: relative; + + display: none; +} +.modal__item.active{ + display: flex; + flex-direction: column; + justify-content: space-between; } .modal__close{ position: absolute; diff --git a/assets/js/gp-main.js b/assets/js/gp-main.js index d5d0196..0e01cff 100644 --- a/assets/js/gp-main.js +++ b/assets/js/gp-main.js @@ -19,38 +19,7 @@ // } -function toggleOpenX(mainElement, buttonElement ,widthElement, contentElement, close) { - let elements = document.querySelectorAll(mainElement); - - elements.forEach(e => { - let thisMainElement = e, - thisButtonElement = e.querySelector(buttonElement), - thisWidthElement = e.querySelector(widthElement), - thisContentElement = e.querySelector(contentElement); - - thisButtonElement.onclick = function (e) { - let width = thisWidthElement.clientHeight; - - if (close == true && !thisMainElement.classList.contains('active')) { - elements.forEach(e => { - if (e.classList.contains('active')) { - e.classList.remove('active'); - e.querySelector(contentElement).style.height = null - } - }) - } - if (!thisMainElement.classList.contains('active')) { - thisContentElement.style.height = `${width}px`; - thisMainElement.classList.add('active'); - }else{ - thisContentElement.style.height = null; - thisMainElement.classList.remove('active'); - } - } - - }); -} // header start // toggleOpenX('#pc-menu','.header__menu-block','.header__pc-menu'); @@ -80,4 +49,86 @@ checkbox.forEach(e => { e.classList.toggle('active'); } }) -// checkbox \ No newline at end of file +// checkbox + +// media +modalOpen('.button--filter', '.modal__filter'); +modalClose('.modal__close'); +// media + + + +function modalOpen(buttonElement, contentElement){ + let modal = document.querySelector('.modal'), + aside = document.querySelector('.modal__aside'), + elements = document.querySelectorAll(buttonElement); + + elements.forEach(e => { + let thisContentElement = document.querySelector(contentElement); + + e.onclick = function () { + modal.classList.add('active'); + thisContentElement.classList.add('active'); + + let width = thisContentElement.clientWidth; + + setTimeout(() => { + aside.style.width = `${width}px`; + }, 10); + } + }) +} + +function modalClose(buttonElement) { + let modal = document.querySelector('.modal'), + aside = document.querySelector('.modal__aside'), + asideItems = document.querySelectorAll('.modal__item'), + elements = document.querySelectorAll(buttonElement); + + elements.forEach(e => { + e.onclick = function () { + modal.classList.remove('active'); + aside.style.width = 0; + + + asideItems.forEach(e => { + if (e.classList.contains('active')) { + e.classList.remove('active'); + } + }) + } + }) +} + +function toggleOpenX(mainElement, buttonElement ,heightElement, contentElement, close) { + let elements = document.querySelectorAll(mainElement); + + elements.forEach(e => { + let thisMainElement = e, + thisButtonElement = e.querySelector(buttonElement), + thisHeightElement = e.querySelector(heightElement), + thisContentElement = e.querySelector(contentElement); + + thisButtonElement.onclick = function (e) { + let height = thisHeightElement.clientHeight; + + if (close == true && !thisMainElement.classList.contains('active')) { + elements.forEach(e => { + if (e.classList.contains('active')) { + e.classList.remove('active'); + e.querySelector(contentElement).style.height = null + } + }) + } + + if (!thisMainElement.classList.contains('active')) { + thisContentElement.style.height = `${height}px`; + thisMainElement.classList.add('active'); + }else{ + thisContentElement.style.height = null; + thisMainElement.classList.remove('active'); + } + } + + }); +} \ No newline at end of file