Fixed bugs and added methods in DisplayMode
This commit is contained in:
parent
d8a6e846b6
commit
2d1f482a7e
@ -13,6 +13,7 @@
|
|||||||
- Изменеия в расположении файлов scss.
|
- Изменеия в расположении файлов scss.
|
||||||
- Исправлено влияние стилей селекта на JS приложение.
|
- Исправлено влияние стилей селекта на JS приложение.
|
||||||
|
|
||||||
### ..... - обновление 0.1.1-
|
### ..... - обновление 0.1.16
|
||||||
|
|
||||||
- Добавленна возможность менять отображения селекта на телефонах (нативный/cg-select)
|
- Добавленна возможность менять отображения селекта на телефонах (нативный/cg-select).
|
||||||
|
- Добавленна возможность менять отображения листа с выбором (обычный/модальное окно)
|
||||||
|
@ -95,6 +95,8 @@ export class DropDown {
|
|||||||
darkTheme: true/false,
|
darkTheme: true/false,
|
||||||
searchMode: true/false,
|
searchMode: true/false,
|
||||||
closeOnSelect: true/false,
|
closeOnSelect: true/false,
|
||||||
|
nativeSelectMode: true/false,
|
||||||
|
listDisplayMode: true/false,
|
||||||
language: 'ru/en',
|
language: 'ru/en',
|
||||||
styles: {
|
styles: {
|
||||||
head: {
|
head: {
|
||||||
@ -237,11 +239,18 @@ export class DropDown {
|
|||||||
* @method buttonControl
|
* @method buttonControl
|
||||||
*/
|
*/
|
||||||
buttonControl(button, method) {
|
buttonControl(button, method) {
|
||||||
|
const {listDisplayMode} = this.#options;
|
||||||
|
|
||||||
|
|
||||||
|
if(listDisplayMode === true){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
this.btn = button;
|
this.btn = button;
|
||||||
button.addEventListener('click', () => {
|
button.addEventListener('click', () => {
|
||||||
if (method === 'open') {
|
if (method.toLowerCase() === 'open') {
|
||||||
this.#open(true);
|
this.#open(true);
|
||||||
} else if (method === 'close') {
|
} else if (method.toLowerCase() === 'close') {
|
||||||
this.#close();
|
this.#close();
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
@ -396,7 +405,13 @@ export class DropDown {
|
|||||||
* @description Рендер елементов в селекте.
|
* @description Рендер елементов в селекте.
|
||||||
*/
|
*/
|
||||||
#render(select) {
|
#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);
|
const random = Math.random().toString(36).substring(2, 10);
|
||||||
|
|
||||||
if (select || (select && styles)) {
|
if (select || (select && styles)) {
|
||||||
@ -487,9 +502,15 @@ export class DropDown {
|
|||||||
this.#SelectMode(nativeSelectMode);
|
this.#SelectMode(nativeSelectMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.#list = this.#element.querySelector('.list');
|
this.#list = this.#element.querySelector('.list');
|
||||||
this.#caret = this.#element.querySelector('.caret');
|
this.#caret = this.#element.querySelector('.caret');
|
||||||
|
|
||||||
|
if(listDisplayMode === true){
|
||||||
|
this.#DisplayMode(listDisplayMode)
|
||||||
|
}
|
||||||
|
|
||||||
this.#addOptionsBehaviour();
|
this.#addOptionsBehaviour();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -843,7 +864,7 @@ export class DropDown {
|
|||||||
/**
|
/**
|
||||||
* Приватный метод экземпляра класса DropDown
|
* Приватный метод экземпляра класса DropDown
|
||||||
* @protected
|
* @protected
|
||||||
* @param {boolean} nativeSelectMode
|
* @param {boolean} nativeSelectMode параметр отвечающий за добавления нативного селекта.
|
||||||
* @description Изменяет отображение селекта на мобильных устройствах
|
* @description Изменяет отображение селекта на мобильных устройствах
|
||||||
* @method #SelectMode
|
* @method #SelectMode
|
||||||
*/
|
*/
|
||||||
@ -859,7 +880,6 @@ export class DropDown {
|
|||||||
select.classList.add('displayHide');
|
select.classList.add('displayHide');
|
||||||
list.classList.add('displayHide');
|
list.classList.add('displayHide');
|
||||||
nativeSelect.classList.add('nativeSelectActive');
|
nativeSelect.classList.add('nativeSelectActive');
|
||||||
|
|
||||||
} else if( win > 576){
|
} else if( win > 576){
|
||||||
select.classList.remove('displayHide');
|
select.classList.remove('displayHide');
|
||||||
list.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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
@import './style/scrollbar.scss';
|
@import './style/scrollbar.scss';
|
||||||
@import './style/svgStyle.scss';
|
@import './style/svgStyle.scss';
|
||||||
@import './style/whiteTheme.scss';
|
@import './style/whiteTheme.scss';
|
||||||
|
@import './style/displayMode.scss';
|
||||||
|
|
||||||
// ----Layout----
|
// ----Layout----
|
||||||
.cg-dropdown {
|
.cg-dropdown {
|
||||||
@ -292,7 +293,7 @@ input[type='checkbox'] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.displayHide {
|
.displayHide {
|
||||||
display: none;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*320px - 576px*/
|
/*320px - 576px*/
|
||||||
@ -302,23 +303,13 @@ input[type='checkbox'] {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
|
||||||
width: 90%;
|
|
||||||
|
|
||||||
.header {
|
|
||||||
h1 {
|
|
||||||
font-size: 32px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
width: 98% !important;
|
width: 98% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
// .open {
|
.listModal {
|
||||||
// display: none !important;
|
width: 88% !important;
|
||||||
// }
|
}
|
||||||
|
|
||||||
.cg-select {
|
.cg-select {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
|
@ -13,6 +13,14 @@ const codeFourth = document.getElementById('codeFourth');
|
|||||||
const fifthBtn = document.getElementById('fifth');
|
const fifthBtn = document.getElementById('fifth');
|
||||||
const codeFifth = document.getElementById('codeFifth');
|
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', () => {
|
firstBtn.addEventListener('click', () => {
|
||||||
codeFirst.classList.toggle("active")
|
codeFirst.classList.toggle("active")
|
||||||
})
|
})
|
||||||
@ -32,3 +40,11 @@ fourthBtn.addEventListener('click', () => {
|
|||||||
fifthBtn.addEventListener('click', () => {
|
fifthBtn.addEventListener('click', () => {
|
||||||
codeFifth.classList.toggle("active")
|
codeFifth.classList.toggle("active")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
six.addEventListener('click', () => {
|
||||||
|
codeSix.classList.toggle("active")
|
||||||
|
})
|
||||||
|
|
||||||
|
Native.addEventListener('click', () => {
|
||||||
|
codeNative.classList.toggle("active")
|
||||||
|
})
|
@ -87,7 +87,6 @@
|
|||||||
|
|
||||||
.content {
|
.content {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
// background-color: #6b6d76;
|
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
-webkit-border-radius: 5px;
|
-webkit-border-radius: 5px;
|
||||||
-moz-border-radius: 5px;
|
-moz-border-radius: 5px;
|
||||||
@ -113,7 +112,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&_submit {
|
&_submit {
|
||||||
//background-color: #2a2f3b;
|
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: 35px;
|
height: 35px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
@ -194,3 +192,21 @@ pre {
|
|||||||
.active {
|
.active {
|
||||||
display: block;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -79,17 +79,15 @@
|
|||||||
<h2 class="example-select_title">Дефолтный селект с функцией nativeSelectMode</h2>
|
<h2 class="example-select_title">Дефолтный селект с функцией nativeSelectMode</h2>
|
||||||
|
|
||||||
<form method="get" class="form">
|
<form method="get" class="form">
|
||||||
<p style="margin-left: 15px; color: white">
|
<p style="margin-left: 12px; color: white">
|
||||||
*При мобильном разрешении появляеться нативный селект.
|
*При мобильном разрешении появляеться нативный селект.
|
||||||
</p>
|
</p>
|
||||||
<div class="layout-select">
|
<div class="layout-select">
|
||||||
<button class="cg-dropdown cg-dropdown_selectNative"></button>
|
<button class="cg-dropdown cg-dropdown_selectNative"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="submit" value="Отправить!" class="example-select_submit" />
|
<button type="button" class="check-code" id="Native">Посмотреть код</button>
|
||||||
|
<code id="codeNative">
|
||||||
<button type="button" class="check-code" id="first">Посмотреть код</button>
|
|
||||||
<code id="codeFirst">
|
|
||||||
<pre>
|
<pre>
|
||||||
<span class="code__keyword">const</span> <span class="code__var">dropdown</span> = <span class="code__keyword">new</span> <span class="code__class">DropDown</span>({
|
<span class="code__keyword">const</span> <span class="code__var">dropdown</span> = <span class="code__keyword">new</span> <span class="code__class">DropDown</span>({
|
||||||
selector: <span class="code__string">'.cg-dropdown_one',</span>
|
selector: <span class="code__string">'.cg-dropdown_one',</span>
|
||||||
@ -120,6 +118,50 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="example-select">
|
||||||
|
<h2 class="example-select_title">Дефолтный селект с функцией listDisplayMode</h2>
|
||||||
|
|
||||||
|
<form method="get" class="form">
|
||||||
|
<p style="margin-left: 12px; color: white">
|
||||||
|
*При использовании данного метода лист с выбором появляеться как модальное окно.
|
||||||
|
</p>
|
||||||
|
<div class="layout-select">
|
||||||
|
<button class="cg-dropdown cg-dropdown_listDisplayMode"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="button" class="check-code" id="six">Посмотреть код</button>
|
||||||
|
|
||||||
|
<code id="codeSix">
|
||||||
|
<pre>
|
||||||
|
<span class="code__keyword">const</span> <span class="code__var">dropdown</span> = <span class="code__keyword">new</span> <span class="code__class">DropDown</span>({
|
||||||
|
selector: <span class="code__string">'.cg-dropdown_listDisplayMode',</span>
|
||||||
|
placeholder: <span class="code__string">'Выберите авто',</span>
|
||||||
|
listDisplayMode: <span class="code__keyword">true,</span>
|
||||||
|
items: [
|
||||||
|
<span class="code__string">'BMW',</span>
|
||||||
|
{
|
||||||
|
id: <span class="code__string">'213sade',</span>
|
||||||
|
title: <span class="code__string">'Opel',</span>
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
<span class="code__string">'Mersedes',</span>
|
||||||
|
<span class="code__string">'MAN',</span>
|
||||||
|
<span class="code__string">'Ferari',</span>
|
||||||
|
],
|
||||||
|
styles: {
|
||||||
|
head: {
|
||||||
|
width: <span class="code__string">'830px',</span>
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
width: <span class="code__string">'824px',</span>
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</pre>
|
||||||
|
</code>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="example-select">
|
<div class="example-select">
|
||||||
<h1 class="example-select_title">Селект с данными с URL</h1>
|
<h1 class="example-select_title">Селект с данными с URL</h1>
|
||||||
<div class="layout-select">
|
<div class="layout-select">
|
||||||
@ -272,7 +314,7 @@
|
|||||||
<h1 class="example-select_title">Функция disabled</h1>
|
<h1 class="example-select_title">Функция disabled</h1>
|
||||||
|
|
||||||
<input type="checkbox" name="chbx" id="checkboxDisable" style="margin: 16px" />
|
<input type="checkbox" name="chbx" id="checkboxDisable" style="margin: 16px" />
|
||||||
<label for="checkboxDisable">Вы согласны на обработку данных</label>
|
<label for="checkboxDisable" style="color: white">Вы согласны на обработку данных</label>
|
||||||
|
|
||||||
<div class="layout-select">
|
<div class="layout-select">
|
||||||
<button class="cg-dropdown cg-dropdown_checkboxDisable"></button>
|
<button class="cg-dropdown cg-dropdown_checkboxDisable"></button>
|
||||||
|
@ -27,13 +27,7 @@ const dropdown = new DropDown({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// const ger = {
|
// ------------------------------NativeSelect-----------------------
|
||||||
// placeholder: 'searcH????',
|
|
||||||
// textInListSearch: 'None',
|
|
||||||
// };
|
|
||||||
|
|
||||||
// dropdown.addLenguage(ger);
|
|
||||||
|
|
||||||
const dropdownNativeSelect = new DropDown({
|
const dropdownNativeSelect = new DropDown({
|
||||||
selector: '.cg-dropdown_selectNative',
|
selector: '.cg-dropdown_selectNative',
|
||||||
placeholder: 'Выберите авто',
|
placeholder: 'Выберите авто',
|
||||||
@ -61,6 +55,32 @@ const dropdownNativeSelect = new DropDown({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ------------------------------listDisplayMode--------------------
|
||||||
|
const dropdownlistDisplayMode = new DropDown({
|
||||||
|
selector: '.cg-dropdown_listDisplayMode',
|
||||||
|
placeholder: 'Выберите авто',
|
||||||
|
listDisplayMode: true,
|
||||||
|
items: [
|
||||||
|
'BMW',
|
||||||
|
{
|
||||||
|
id: '213sade',
|
||||||
|
title: 'Opel',
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
'Mersedes',
|
||||||
|
'MAN',
|
||||||
|
'Ferari',
|
||||||
|
],
|
||||||
|
styles: {
|
||||||
|
head: {
|
||||||
|
width: '830px',
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
width: '824px',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// ------------------------------URL--------------------
|
// ------------------------------URL--------------------
|
||||||
const dropdown3 = new DropDown({
|
const dropdown3 = new DropDown({
|
||||||
selector: '.cg-dropdown_three',
|
selector: '.cg-dropdown_three',
|
||||||
|
24
src/style/displayMode.scss
Normal file
24
src/style/displayMode.scss
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
.modal {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: rgba(0, 0, 0, 0.45);
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: 9999;
|
||||||
|
|
||||||
|
&_active {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.listModal {
|
||||||
|
position: fixed !important;
|
||||||
|
top: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overflowHide {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user