diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d2f3ce..f1436f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - Изменеия в расположении файлов scss. - Исправлено влияние стилей селекта на JS приложение. -### ..... - обновление 0.1.1- +### ..... - обновление 0.1.16 -- Добавленна возможность менять отображения селекта на телефонах (нативный/cg-select) +- Добавленна возможность менять отображения селекта на телефонах (нативный/cg-select). +- Добавленна возможность менять отображения листа с выбором (обычный/модальное окно) diff --git a/src/cg-select.js b/src/cg-select.js index c38ade4..2c2336b 100644 --- a/src/cg-select.js +++ b/src/cg-select.js @@ -95,6 +95,8 @@ export class DropDown { darkTheme: true/false, searchMode: true/false, closeOnSelect: true/false, + nativeSelectMode: true/false, + listDisplayMode: true/false, language: 'ru/en', styles: { head: { @@ -237,11 +239,18 @@ export class DropDown { * @method buttonControl */ buttonControl(button, method) { + const {listDisplayMode} = this.#options; + + + if(listDisplayMode === true){ + return + } + this.btn = button; button.addEventListener('click', () => { - if (method === 'open') { + if (method.toLowerCase() === 'open') { this.#open(true); - } else if (method === 'close') { + } else if (method.toLowerCase() === 'close') { this.#close(); } else { return; @@ -396,7 +405,13 @@ export class DropDown { * @description Рендер елементов в селекте. */ #render(select) { - const { styles, multiselect, searchMode, multiselectTag, darkTheme, language, nativeSelectMode } = this.#options; + const { + styles, multiselect, + searchMode, multiselectTag, + darkTheme, language, + nativeSelectMode, listDisplayMode + } = this.#options; + const random = Math.random().toString(36).substring(2, 10); if (select || (select && styles)) { @@ -487,9 +502,15 @@ export class DropDown { this.#SelectMode(nativeSelectMode); } + + this.#list = this.#element.querySelector('.list'); this.#caret = this.#element.querySelector('.caret'); + if(listDisplayMode === true){ + this.#DisplayMode(listDisplayMode) + } + this.#addOptionsBehaviour(); } @@ -843,7 +864,7 @@ export class DropDown { /** * Приватный метод экземпляра класса DropDown * @protected - * @param {boolean} nativeSelectMode + * @param {boolean} nativeSelectMode параметр отвечающий за добавления нативного селекта. * @description Изменяет отображение селекта на мобильных устройствах * @method #SelectMode */ @@ -858,8 +879,7 @@ export class DropDown { if(win < 576){ select.classList.add('displayHide'); list.classList.add('displayHide'); - nativeSelect.classList.add('nativeSelectActive'); - + nativeSelect.classList.add('nativeSelectActive'); } else if( win > 576){ select.classList.remove('displayHide'); list.classList.remove('displayHide'); @@ -871,4 +891,33 @@ export class DropDown { } } + + /** + * Приватный метод экземпляра класса DropDown + * @protected + * @param {boolean} listDisplayMode параметр отвечающий за отображение выбора в виде модального окна. + * @description Изменяет отображение листа с выбором в виде модального окна. + * @method #DisplayMode + * @returns + */ + #DisplayMode(listDisplayMode){ + if(listDisplayMode === true){ + const modal = document.createElement('div'); + const body = document.querySelector('body') + const list = this.#list; + + modal.appendChild(list); + this.#element.appendChild(modal); + + this.#element.addEventListener('click', () => { + modal.classList.toggle('modal'); + list.classList.toggle('listModal'); + body.classList.toggle('overflowHide') + }); + + } else{ + return + } + + } } diff --git a/src/main.scss b/src/main.scss index 6144c11..6a42d86 100644 --- a/src/main.scss +++ b/src/main.scss @@ -2,6 +2,7 @@ @import './style/scrollbar.scss'; @import './style/svgStyle.scss'; @import './style/whiteTheme.scss'; +@import './style/displayMode.scss'; // ----Layout---- .cg-dropdown { @@ -292,7 +293,7 @@ input[type='checkbox'] { } .displayHide { - display: none; + display: none !important; } /*320px - 576px*/ @@ -302,23 +303,13 @@ input[type='checkbox'] { padding: 0; } - .container { - width: 90%; - - .header { - h1 { - font-size: 32px; - } - } - } - .list { width: 98% !important; } - // .open { - // display: none !important; - // } + .listModal { + width: 88% !important; + } .cg-select { width: 100% !important; diff --git a/src/page/example.js b/src/page/example.js index 98c3da0..f807677 100644 --- a/src/page/example.js +++ b/src/page/example.js @@ -13,6 +13,14 @@ const codeFourth = document.getElementById('codeFourth'); const fifthBtn = document.getElementById('fifth'); const codeFifth = document.getElementById('codeFifth'); +const six = document.getElementById('six') +const codeSix = document.getElementById('codeSix'); + + +const Native = document.getElementById('Native') +const codeNative = document.getElementById('codeNative') + + firstBtn.addEventListener('click', () => { codeFirst.classList.toggle("active") }) @@ -32,3 +40,11 @@ fourthBtn.addEventListener('click', () => { fifthBtn.addEventListener('click', () => { codeFifth.classList.toggle("active") }) + +six.addEventListener('click', () => { + codeSix.classList.toggle("active") +}) + +Native.addEventListener('click', () => { + codeNative.classList.toggle("active") +}) \ No newline at end of file diff --git a/src/page/example.scss b/src/page/example.scss index b196547..b1bd873 100644 --- a/src/page/example.scss +++ b/src/page/example.scss @@ -87,7 +87,6 @@ .content { margin-top: 15px; - // background-color: #6b6d76; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; @@ -113,7 +112,6 @@ } &_submit { - //background-color: #2a2f3b; width: 200px; height: 35px; border-radius: 10px; @@ -194,3 +192,21 @@ pre { .active { display: block; } + +@media (max-width: 576px) { + .container { + width: 95%; + } + + .header { + margin-top: 15px; + h1 { + font-size: 32px; + } + } + + .example-select_title { + font-size: 14px; + height: 40px; + } +} diff --git a/src/page/index.html b/src/page/index.html index a294766..1f010d6 100644 --- a/src/page/index.html +++ b/src/page/index.html @@ -79,17 +79,15 @@