|
1304 | 1304 | isDropdownToggleAllowed = false; |
1305 | 1305 | setTimeout(() => (isDropdownToggleAllowed = true), 200); |
1306 | 1306 |
|
1307 | | - const nowClickedDropBtn = event.currentTarget; // фиксация нажатой drop-кнопки |
1308 | | - const nowShowedDropList = nowClickedDropBtn.nextElementSibling; // фиксация выпадающего списка (следующего за drop-кнопкой) |
1309 | | - |
1310 | | - // проверка на уже открытый выпадающий список (закрытие) |
1311 | | - const alreadyOpenDropBtn = document.querySelector('.drop-open'); |
| 1307 | + const alreadyOpenDropBtn = document.querySelector('.drop-open'); // фиксация открытого/уже списка (согласно drop-кнопки) |
| 1308 | + const nowClickedDropBtn = event.currentTarget; // фиксация нажатой drop-кнопки (сейчас) |
1312 | 1309 |
|
| 1310 | + // закрытие ранее открытого выпадающего списка (если такой был) |
1313 | 1311 | if (alreadyOpenDropBtn && alreadyOpenDropBtn !== nowClickedDropBtn) { |
1314 | | - const alreadyOpenDropList = alreadyOpenDropBtn.nextElementSibling; |
1315 | | - alreadyOpenDropBtn.classList.remove('arrow-rotate', 'drop-open'); |
1316 | | - |
1317 | | - if ( |
1318 | | - alreadyOpenDropList && |
1319 | | - alreadyOpenDropList.classList.contains('modal-contact-list') |
1320 | | - ) { |
1321 | | - alreadyOpenDropList.classList.add('d-none'); // закрытие ранее открытого списка |
1322 | | - } |
| 1312 | + closeBtnDropdown(); |
1323 | 1313 | } |
1324 | 1314 |
|
| 1315 | + const nowShowedDropList = nowClickedDropBtn.nextElementSibling; // фиксация "ново-открытого" выпадающего списка (согласно drop-кнопки) |
| 1316 | + |
1325 | 1317 | nowClickedDropBtn.classList.toggle('arrow-rotate'); // переключение направления стрелки |
1326 | 1318 | nowShowedDropList.classList.toggle('d-none'); // переключение видимости текущего списка |
1327 | 1319 |
|
|
1406 | 1398 | } |
1407 | 1399 |
|
1408 | 1400 | function closeBtnDropdown() { |
1409 | | - addModalContactList.classList.add('d-none'); // скрытие выпадающего списка |
1410 | | - addModalContactDropBtn.classList.remove('arrow-rotate'); // возврат направления стрелки |
1411 | | - addModalContactDropBtn.blur(); // снятие фокуса с кнопки (после выбора) |
| 1401 | + const openDropdownBtn = document.querySelector('.drop-open'); // фиксация "открывающей" drop-кнопки |
| 1402 | + |
| 1403 | + if (openDropdownBtn) { |
| 1404 | + const dropdownList = openDropdownBtn.nextElementSibling; // фиксация выпадающего списка |
| 1405 | + openDropdownBtn.classList.remove('arrow-rotate', 'drop-open'); // возврат направления стрелки, удаление "открывающего" класса |
| 1406 | + dropdownList.classList.add('d-none'); // скрытие выпадающего списка |
| 1407 | + openDropdownBtn.blur(); // снятие фокуса с кнопки (после выбора) |
| 1408 | + } |
1412 | 1409 | } |
1413 | 1410 |
|
1414 | 1411 | // автоматическое закрытие/скрытие развёрнутого выпадающего drop-списка (при работе НЕ с ним) |
1415 | 1412 | document.addEventListener('click', (event) => { |
1416 | | - const openDropdown = document.querySelector('.drop-open'); |
1417 | | - if (openDropdown) { |
1418 | | - const dropdownList = openDropdown.nextElementSibling; |
1419 | | - |
1420 | | - // закрытие/скрытие выпадающего списка (если последующий "клик" не по нему, не по drop-кнопке) |
1421 | | - if ( |
1422 | | - !openDropdown.contains(event.target) && |
1423 | | - !dropdownList.contains(event.target) |
1424 | | - ) { |
1425 | | - closeBtnDropdown(); // вызов соответствующей функции |
1426 | | - } |
| 1413 | + const openDropdownBtn = document.querySelector('.drop-open'); |
| 1414 | + |
| 1415 | + // закрытие/скрытие выпадающего списка (если последующий "клик" не по нему, не по drop-кнопке) |
| 1416 | + if ( |
| 1417 | + openDropdownBtn && |
| 1418 | + !openDropdownBtn.contains(event.target) && |
| 1419 | + !openDropdownBtn.nextElementSibling.contains(event.target) |
| 1420 | + ) { |
| 1421 | + closeBtnDropdown(); // вызов соответствующей функции |
1427 | 1422 | } |
1428 | 1423 | }); |
1429 | 1424 |
|
1430 | 1425 | addModalWrap.addEventListener('focusout', (event) => { |
1431 | | - const openDropdown = document.querySelector('.drop-open'); |
1432 | | - if (openDropdown) { |
1433 | | - const dropdownList = openDropdown.nextElementSibling; |
1434 | | - |
1435 | | - // закрытие/скрытие выпадающего списка (если "фокус" перешёл на другой элемент, в другое место) |
1436 | | - if ( |
1437 | | - !openDropdown.contains(event.relatedTarget) && |
1438 | | - !dropdownList.contains(event.relatedTarget) |
1439 | | - ) { |
1440 | | - closeBtnDropdown(); // вызов соответствующей функции |
1441 | | - } |
| 1426 | + const openDropdownBtn = document.querySelector('.drop-open'); |
| 1427 | + |
| 1428 | + // закрытие/скрытие выпадающего списка (если "фокус" перешёл на другой элемент, в другое место) |
| 1429 | + if ( |
| 1430 | + openDropdownBtn && |
| 1431 | + !openDropdownBtn.contains(event.relatedTarget) && |
| 1432 | + !openDropdownBtn.nextElementSibling.contains(event.relatedTarget) |
| 1433 | + ) { |
| 1434 | + closeBtnDropdown(); // вызов соответствующей функции |
1442 | 1435 | } |
1443 | 1436 | }); |
1444 | 1437 |
|
|
0 commit comments