在外面单击时关闭响应式汉堡菜单

时间:2020-09-29 00:57:09

标签: javascript html

单击外部的汉堡包菜单是否可以关闭?占用太多空间。到目前为止,我可以再次单击该按钮将其关闭,但是如果我也想单击页面上的其他任何位置时将其关闭该怎么办?这是菜单按钮的代码:

const links = document.getElementById("links");

hamburger.addEventListener("click", () => {
    links.classList.toggle("show");
    hambuger.onclick()
});

在HTML中:

            <img id="IPtokiLOGOBlack" src="styles/images/IPtokiLOGOBlack.svg" />
            <button class="hamburger" id="hamburger">
                <i class="fa fa-bars"></i>
            </button>
            <div class="active" id="links">
                <a href="#home"><?=$menuHome ?></a>
                <a href="#about"><?=$menuAbout ?></a>
                <a href="#projects"><?=$menuProjects ?></a>
                <a href="#team"><?=$menuTeam ?></a>
                <a href="#contact"><?=$menuContact ?></a>
                <a href="#jobs"><?=$menuJobs ?></a>
                <?=$menuLanguage ()?>
            </div>
        </div>

我尝试了这个,但是没有成功(甚至在这里都没有打开):

document.querySelectorAll(".hamburger").forEach((trigger) => {
    const menu = document.querySelector(trigger.dataset.menu);
    const hamburger = document.getElementById("hamburger");
    const links = document.getElementById("links");

    function open() {
        hamburger.addEventListener("click");
        links.classList.toggle("show");
    }

    function close() {
        menu.classList.remove("show");
        menu.removeEventListener("click", outsideClose);
    }

    function outsideClose(event) {
        if (event.target !== menu) {
            close();
        }
    }
    trigger.addEventListener("click", open);
});

enter image description here

1 个答案:

答案 0 :(得分:0)

我不知道到底缺少什么代码,但是可以使用element.contains()方法来完成:

function outsideClose(event)) {
    if (!menu.contains(event.target) {
        close();
    }
}

// assuming this is how outsideClose would look like:

function open() {
    hamburger.addEventListener("click");
    links.classList.toggle("show");

    window.addEventListener('mousedown', outsideClose);
}

相关问题