javascript - 使用 jQuery 创建移动菜单
问题描述
我正在尝试使用 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>
CSS for mobile-menu
and media-query for both mobile-menu
andnavbar
.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();
});
解决方案
当您重新调整窗口大小时,导航菜单未显示的原因是您调用了 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 - 用于在节点中测试并在 Web 上运行的 TypeScript 模块
- image - 如何使用图像箱从加载的图像中获取和比较 ColorType?
- nopcommerce - Nopcommerce 插件配置页面问题
- firebase - 使用 Vue.js 从 Firestore 获取单个记录
- c - Brainfuck中的嵌套循环
- c# - 如何对多个(复杂结构)字段进行 RavenDB 查询并返回匹配的值?
- python - Python OpenCV使用轮廓查找正方形
- python - Numpy没有属性loadtxt?
- reactjs - GraphQLError:语法错误:无法解析意外字符“\u00A0”
- python - Python:将元素添加到文件列表中,每次都无需读写