|
746 | 746 | addModalBodyAddBtn.disabled = true; |
747 | 747 | } |
748 | 748 |
|
749 | | - // показ/скрытие выпадающего списка вариантов/контактов |
| 749 | + let isDropdownToggleAllowed = true; // возможность/разрешение на показ выпадающего списка |
| 750 | + |
| 751 | + // показ/скрытие выпадающего списка вариантов/контактов (открытым может быть только один, переключение) |
750 | 752 | addModalContactDropBtn.addEventListener('click', (event) => { |
751 | | - event.currentTarget.classList.toggle('arrow-rotate'); // переключение направления стрелки |
752 | | - addModalContactList.classList.toggle('d-none'); |
| 753 | + if (!isDropdownToggleAllowed) return; // проверка возможности/разрешения на показ списка |
| 754 | + |
| 755 | + // попытка исключения хаотичных действий/наложений (задержка) |
| 756 | + isDropdownToggleAllowed = false; |
| 757 | + setTimeout(() => (isDropdownToggleAllowed = true), 200); |
| 758 | + |
| 759 | + const nowClickedDropBtn = event.currentTarget; // фиксация нажатой drop-кнопки |
| 760 | + const nowShowedDropList = nowClickedDropBtn.nextElementSibling; // фиксация выпадающего списка (следующего за drop-кнопкой) |
| 761 | + |
| 762 | + // проверка на уже открытый выпадающий список (закрытие) |
| 763 | + const alreadyOpenDropBtn = document.querySelector('.drop-open'); |
| 764 | + |
| 765 | + if (alreadyOpenDropBtn && alreadyOpenDropBtn !== nowClickedDropBtn) { |
| 766 | + const alreadyOpenDropList = alreadyOpenDropBtn.nextElementSibling; |
| 767 | + alreadyOpenDropBtn.classList.remove('arrow-rotate', 'drop-open'); |
| 768 | + |
| 769 | + if ( |
| 770 | + alreadyOpenDropList && |
| 771 | + alreadyOpenDropList.classList.contains( |
| 772 | + 'modal__add-body-add-contact-list' |
| 773 | + ) |
| 774 | + ) { |
| 775 | + alreadyOpenDropList.classList.add('d-none'); // закрытие ранее открытого списка |
| 776 | + } |
| 777 | + } |
| 778 | + |
| 779 | + nowClickedDropBtn.classList.toggle('arrow-rotate'); // переключение направления стрелки |
| 780 | + nowShowedDropList.classList.toggle('d-none'); // переключение видимости текущего списка |
753 | 781 |
|
754 | | - if (!addModalContactList.classList.contains('d-none')) { |
755 | | - event.currentTarget.focus(); // добавление фокуса кнопке (до момента выбора) |
| 782 | + // переключение видимости |
| 783 | + if (nowShowedDropList.classList.contains('d-none')) { |
| 784 | + nowClickedDropBtn.classList.remove('drop-open'); |
| 785 | + } else { |
| 786 | + nowClickedDropBtn.classList.add('drop-open'); |
| 787 | + nowClickedDropBtn.focus(); // добавление фокуса кнопке (до момента выбора) |
756 | 788 | } |
757 | 789 | }); |
758 | 790 |
|
|
0 commit comments