javascript - 使用 javascript 切换 CSS 类选择器

标签 javascript html jquery css menu

我是网络开发新手,正在尝试创建一个投资组合网站。我正在尝试创建一个全页导航栏。我正在使用 bootstrap 5,当我单击右侧的按钮时,导航栏可以工作,但我想在选择菜单项时自动关闭导航栏。我正在用不同的部分在一个体内创造一切。

HTML

<nav class="navbar fixed-top navbar-expand-lg">
        <div class="container">
            <a onclick="openMenu();" title="" class="btn">
                <span></span>
                <span></span>
            </a>
            <div class="menu">
                <ul class="menu_list">
                    <li class="menu_list">
                        <a href="#home" title="" onclick="closeMenu();" class="menu_link">Home</a>
                    </li>
                    <li class="menu_list">
                        <a href="#about-me" title="" onclick="closeMenu();" class="menu_link">About</a>
                    </li>
                    <li class="menu_list">
                        <a href="#projects" title="" onclick="closeMenu();" class="menu_link">Projects</a>
                    </li>
                    <li class="menu_list">
                        <a href="#contact" title="" onclick="closeMenu();" class="menu_link">Contact</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

CSS

.btn{
    position: absolute;
    top: 21px;
    right: 25px;
    z-index: 3;
    display: flex;
    width: 20px;
    height: 20px;
    
}
/*size of the button lines*/
.btn span{
    position: absolute;
    display: flex;
    width: 20px;
    height: 2px;
    background: rgba(247,72,78,255);
    transition: .5s;
}
/*position of each line within the button space*/
.btn span:nth-child(1){
    top: 25%;
}
.btn span:nth-child(2){
    top: 75%;
}

.btn.is-active span{
    background: rgba(247,72,78,255);
}

/*transformation to X*/
.btn.is-active span:nth-child(1){
    top: 50%;
    transform:  rotate(-45deg);
}
.btn.is-active span:nth-child(2){
    top: 50%;
    transform:  rotate(45deg);
}

/*menu details*/
.menu {
    background: rgb(0, 0, 0,0.60);
    display: flex;
    align-items: center;
    position: fixed;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    padding: 100px;
    z-index: 1;
    transform: .5s;
    opacity: 0;
    visibility: hidden;
}

/*when active (clicked)*/
.menu.is-active{
    transition: .5s;
    opacity: 1;
    visibility: visible;
}

javascript: open menu() 工作正常,当使用 btn 打开或关闭菜单时使用它。 closeMenu() 是我遇到的困难。我尝试进行选择并从 is-active 切换回 .menu,但它不起作用。

function openMenu(e){
    let menu = document.querySelector('.menu');
    let btn = document.querySelector('.btn');

    menu.classList.toggle('is-active');
    btn.classList.toggle('is-active');

    e.preventDefault();
}

function closeMenu(){
    let menu = document.querySelector('.menu.is-active');
    let btn = document.querySelector('.btn.is-active');
    menu.classList.toggle('.menu');
    btn.classList.toggle('.btn');
    
    e.preventDefault();
}

感谢任何帮助。

最佳答案

在函数 closeMenu() 中,应选择 menubtn 变量,而不使用 .is-active code> 类,然后您可以切换该类 .is-active

 function closeMenu(){
        let menu = document.querySelector('.menu');
        let btn = document.querySelector('.btn');
        menu.classList.toggle('is-active');
        btn.classList.toggle('is-active');
        
        e.preventDefault();
    }

关于javascript - 使用 javascript 切换 CSS 类选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70409236/

相关文章:

jquery - 使用 jquery 在菜单中突出显示当前 url

javascript - 从文本框上的 onclick 函数调用时,datepicker() 在点击 2 次(而不是点击 1 次)后才起作用

javascript - 变量名长度与性能

html - 移动设备只能部分显示网页

html - 我怎样才能将一个元素固定在 flexbox 流的顶行(右侧)并且仍然允许元素在它存在时立即在它下面流动?

javascript - MVC Bootstrap Navbar - 事件类只保留一个 <li> 元素

javascript - AngularJS:带有动态数据的 ng-repeat

javascript - LinkingIOS rctwebsocketmodule.connect 被调用时使用了 4 个参数,但需要 2 个参数

html - 输入字段不必要的属性正在接受 IOS 设备

php - jquery中如何比较两个日期