【问题标题】:create mobile menu with jQuery使用 jQuery 创建移动菜单
【发布时间】:2021-02-04 20:33:15
【问题描述】:

我正在尝试使用 jQuery 创建一个移动菜单,但遇到以下问题:移动菜单仅根据我输入@媒体查询的宽度显示,当我单击其中一个导航链接时,他们应该消失。但是,如果我将窗口大小调整为全宽,导航栏将完全隐藏,我只能看到徽标。要再次显示导航菜单,我必须刷新页面。我该如何解决?

这是标题的 HTML

   <header>
        <div class="logo">
            <i class="fas fa-code fa-3x"></i> 
        </div>

        <div class="mobile-menu"><i class="fa fa-bars fa-2x"></i></div>

        <nav class="navbar">
            <ul>
                <li><a href="#home">Home</a></li>
                <li><a href="#projects">Projects</a></li>
                <li><a href="#contact">Contact</a></li>
            </ul>
        </nav>
    </header>

mobile-menu 的 CSS 和 mobile-menunavbar 的媒体查询

.mobile-menu {
    color: white;
    position: absolute;
    right: 20px;
    display: none;
}  
@media only screen and (max-width: 768px){

    .mobile-menu {
        display: block;
    }

    .navbar {
        display: none;
        flex-direction: column;
        background: var(--secondary);
        width: 11rem;
        position: absolute;
        right: 0;
        top: 60px;
    }
}

JS

$('.mobile-menu').on('click', function () {
    $('.navbar').slideToggle();
});

$('.navbar').click(function () {
    $(this).hide();
});

【问题讨论】:

    标签: javascript html jquery css


    【解决方案1】:

    当您重新调整窗口大小时,导航菜单未显示的原因是您调用了 hide() 方法,该方法将内联(显示:无)css 样式添加到您的元素。 为防止这种情况,我建议您在导航栏中添加/删除额外的 css 类。
    例如:

    .hidden {
      display:none;
    }
    
    @media only screen and (max-width: 768px){
      .hidden {
        display:block; // Or whatever (flex, grid, etc.)
      }
    }
    

    或者:

    删除在导航栏调整大小断点处使用 show()。

    $(window).resize(function () {
      var width = $(this).width()
      if (width > 768) {
        $(".navbar").show()
      }
    })
    

    【讨论】:

    • 天哪,你是真正的救生员!!我尝试了第二种解决方案,起初它没有用,但后来我这样做了javascript $(window).resize(function () { var width = $(this).width() if (width &gt; 768) { $(".navbar").show() } else { $('nav ul li').click(function() { $('.navbar').hide() }); } }) ,它似乎有效!我正在测试,但是当宽度为 768px 或更少时,一切仍然正常,当我调整窗口大小时,现在显示导航!非常感谢,我不知道它是否是正确的解决方案,但这就是它的工作原理
    • 是的,所以我做了更多的测试,它有一些错误,有时导航栏又消失了,我仍然需要刷新
    • 使用浏览器检查器查看菜单发生的情况。关键是 hide() 方法将内联样式添加到您的元素中,从而覆盖您的 css 类样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多