javascript - 点击手机屏幕后,导航栏在大屏幕上消失
问题描述
我有一个轮播和一个导航栏。当它显示在移动设备上时,导航栏会消失,汉堡图标会出现。当您单击汉堡图标时,导航栏将切换。问题是:如果我不点击汉堡图标,当我缩小或拉伸屏幕时,导航栏和汉堡图标消失/出现在右边,但如果在移动屏幕上我点击汉堡图标并关闭它,之后我拉伸屏幕,导航栏将在大屏幕上永远消失。我是新手,我真的不知道为什么。请帮我解决一下这个。非常感谢!
var src1 = "./images/icon-close.svg";
var src2 = "./images/icon-close.svg";
$('#mobile-nav-icon').click(
function() {
$('.navbar-list').slideToggle(200);
$('.navbar-list').toggleClass("background");
$('.navbar-list').toggleClass("selected");
var src = $('#mobile-nav-icon').attr('src');
if (src == src1) {
$('#mobile-nav-icon').attr('src', src2);
} else {
$('#mobile-nav-icon').attr('src', src1);
}
}
);
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Spartan', sans-serif;
font-size: 62.5%;
}
.background {
background-color: white;
}
.section1 {
position: relative;
}
.nopadding {
padding: 0 !important;
margin: 0 !important;
}
.selected {
box-shadow: 0 0 0 99999px rgba(0, 0, 0, .5);
}
/* navbar */
.navbar-list {
list-style: none;
width: 380%;
height: 100px;
display: block;
}
.navigation {
position: absolute;
top: 7%;
left: 8%;
}
.navbar-brand {
float: left;
margin: 0 40px 0 3%;
color: white;
font-weight: 600;
font-size: 2rem;
}
.navbar-item {
display: inline-block;
margin: 1.6% 3% 3%;
}
.navbar-link {
color: white;
font-size: 1.2rem;
}
#mobile-nav-icon {
display: none;
position: absolute;
margin-top: 6%;
cursor: pointer;
}
.navbar-link:hover {
color: white;
text-decoration: none;
}
/* reponsive */
@media (max-width:540px) {
#mobile-nav-icon {
margin-top: 6%;
display: block;
}
.navbar-list {
display: none;
position: absolute;
font-weight: 600;
width: 300%;
top: -30px;
left: -30px;
height: 100px;
}
.navbar-brand {
margin-left: 150px;
}
.navbar-link {
color: black;
}
.navbar-item {
margin-top: 6%;
}
.navbar-item:first-child {
margin-left: 10%;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<div class="row">
<div class="col-lg-7 nopadding section1">
<!-- carosel -->
<div class="carousel slide" data-interval="false">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/other/cat_relaxing_on_patio_other/1800x1200_cat_relaxing_on_patio_other.jpg" class="d-block w-100" alt="image-hero-1">
</div>
</div>
</div>
<!-- navbar -->
<nav class="navigation">
<a class="navbar-brand" href="#">room</a>
<div class="navbar-list-button">
<ul class="navbar-list">
<li class="navbar-item">
<a class="navbar-link" href="#">home</a>
</li>
<li class="navbar-item">
<a class="navbar-link" href="#">shop</a>
</li>
<li class="navbar-item">
<a class="navbar-link" href="#">about</a>
</li>
<li class="navbar-item">
<a class="navbar-link" href="#">contact</a>
</li>
</ul>
<img id="mobile-nav-icon" src="./images/icon-hamburger.svg" alt="icon-hamburger">
</div>
</nav>
</div>
解决方案
我不会使用 .slideToggle() 来显示或隐藏菜单,而是使用 toggleClass('showing')
然后在媒体查询中定义 .showing 类,如下所示:
@media (max-width:540px) {
.navbar-list {
display: none;
}
.navbar-list.showing {
display: block;
}
}
使用 .slideToggle() 打开然后关闭菜单,意味着当你再次扩大屏幕时,它仍然会关闭。
但是通过使用 .toggleClass('showing') 你正在打开菜单,通过添加 CSS 规则,这些规则只有在屏幕薄于 540 像素时才会生效。当你关闭它时,这个类将被删除,所以 display: none 来自你更一般的媒体查询将重新发挥作用。然后当您扩大屏幕时,不会应用任何媒体查询,因此您将返回显示:阻止(菜单打开)。
推荐阅读
- javascript - d3.js - 对由数组控制的 .key 的调用次数
- javascript - 根据 parameterName 获取 parameterDescription
- c# - 将 esp8266 代码(部分)转换为 c/c++ 或 c#
- reactjs - How to include the same React app twice on the same page?
- c# - 如果我的用户与我的 AspNetCore webapp 上的所需角色相关联,为什么我会被禁止?
- java - 单例设计模式示例
- ruby-on-rails - ActiveStorage S3 文件上传未定义的关键字 content_type
- xgboost - Xgboost cox 生存时间入口
- python - 使用 to_gbq 将 pandas 数据帧上传到 BigQuery 重写整数
- python - 如何在 python 中快速从大型 fasta 文件中删除重复序列?