Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.08.2022, 17:45
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 166

Скрытие блока по клику вне его
Привет мир.

Имеем кнопочку:

<div id="kide-menu" class="kide-menu-icon"><i id="bar" class="fa fa-ellipsis-v" aria-hidden="true"></i></div>


при клике на которую срабатывает скрипт:

let kideMenu = document.querySelector('.kide-menu');
    let kideMenuIcon = document.querySelector('#kide-menu');
    kideMenuIcon.addEventListener('click', kideMenuIconClick);

    function kideMenuIconClick() {
        kideMenu.classList.toggle('show-menu');
    }


и отображается / скрывается меню:

<div class="kide-menu">
   меню
</div>


очень бы хотелось скрывать его по клику вне его.
Нашел такой скрипт:

const box = document.querySelector('.kide-menu');
    document.addEventListener('click', (e) => {
        const click = e.composedPath().includes(box);
        if (!click) {
            kideMenu.classList.remove('show-menu');
        }
    });


Вот только теперь при клике на "kide-menu" срабатывает и событие на "document".
Не соображу как добавить в исключения
<div id="kide-menu" class="kide-menu-icon"><i id="bar" class="fa fa-ellipsis-v" aria-hidden="true"></i></div>

Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2022, 18:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Скрытие блока по клику вне его
Ubivectel,
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        #kide-menu {
            width: 80px;
            height: 24px;
            background-color: #0000FF;
            text-align: center;
        }
        #kide-menu:after {
            content: "click me";
            color: #FFFFFF;
        }
        .kide-menu {
            display: none;
        }
        .kide-menu.show-menu {
            display: block;
        }
    </style>
    <script>
        document.addEventListener('click', ({
            target
        }) => {
            if (target.closest(".kide-menu")) return;
            const kideMenu = document.querySelector('.kide-menu');
            if (target.closest("#kide-menu")) kideMenu.classList.toggle("show-menu");
            else kideMenu.classList.remove("show-menu");
        })
    </script>
</head>
<body>
    <div id="kide-menu" class="kide-menu-icon"><i id="bar" class="fa fa-ellipsis-v" aria-hidden="true"></i></div>
    <div class="kide-menu">
        меню
    </div>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2022, 18:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от Ubivectel
Нашел такой скрипт:

https://javascript.ru/forum/dom-wind...tml#post526117

https://javascript.ru/forum/dom-wind...tml#post459845

https://javascript.ru/forum/misc/754...tml#post496299

https://javascript.ru/forum/css-html...tml#post494297
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2022, 20:36
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 166

Спасибо рони, пошел курить матчасть
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот блока относительно его угла Fedya jQuery 5 01.12.2012 16:30
Скрытие блока div и его составляющих pomuk123 Events/DOM/Window 6 14.02.2011 10:31
Как получить размер блока сразу после изменения его содержимого? Cooskon Events/DOM/Window 6 17.09.2010 16:15
закрыти diva при клике вне его Hugo_O Элементы интерфейса 14 21.05.2010 14:39
Закрыть элемент при клике вне его masterm Общие вопросы Javascript 3 31.07.2009 11:27