如何使用 Javascript 在移动设备上 close/collapse 导航 drawer/tab?
How to close/collapse a nav drawer/tab on mobile with Javascript?
我已经尝试了一些简单的解决方案来让这个 JS 与选项卡一起工作,并且一切都运行良好,除了我希望它在单击时关闭移动设备上的选项卡抽屉并且无法使其正常运行。我觉得有一个简单的解决方案,但我似乎无法弄清楚。如果能提供帮助,我们将不胜感激!
/* if in tab mode (laptop) */
$("ul.tabs li").click(function() {
$(".tab_content").hide();
var activeTab = $(this).attr("rel");
$("#"+activeTab).fadeIn();
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab_drawer_heading").removeClass("d_active");
$(".tab_drawer_heading[rel^='"+activeTab+"']").addClass("d_active");
});
/* if in drawer mode (mobile) */
$(".tab_drawer_heading").click(function() {
$(".tab_content").hide();
var d_activeTab = $(this).attr("rel");
$("#"+d_activeTab).fadeIn();
$(".tab_drawer_heading").removeClass("d_active");
$(this).addClass("d_active");
$("ul.tabs li").removeClass("active");
$("ul.tabs li[rel^='"+d_activeTab+"']").addClass("active");
});
ul.tabs {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 50px;
border-bottom: 1px solid #333;
width: 100%;
text-transform: uppercase;
letter-spacing: 4px;
font-size: 0.88em;
margin-top: 2em;
}
ul.tabs li {
float: left;
margin: 0;
cursor: pointer;
padding: 0px 21px;
height: 50px;
line-height: 50px;
border-top: 1px solid rgba(0, 0, 0, 0.03);
border-right: 1px solid rgba(0, 0, 0, 0.03);
border-left: 1px solid rgba(0, 0, 0, 0.03);
margin-right: 10px;
background-color: rgba(0, 0, 0, 0.03);
color: grey;
overflow: hidden;
position: relative;
}
ul.tabs li:hover {
background-color: white;
color: #333;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
}
ul.tabs li.active {
background-color: #fff;
color: #333;
border-bottom: 1px solid #fff;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
display: block;
}
.tab_container {
border-bottom: 1px solid #e3e3e3;
border-top: none;
clear: both;
float: left;
width: 100%;
background: #fff;
overflow: auto;
margin-bottom: 3em;
}
.tab_content {
padding: 15px 20px;
display: none;
}
.tab_drawer_heading { display: none; }
@media screen and (max-width: 599px) {
.tabs {
display: none;
}
.tab_drawer_heading {
background-color: rgba(0, 0, 0, 0.01);
color: #333;
border-top: 1px solid #e3e3e3;
margin: 0;
padding: 14px 20px;
display: block;
font-size: 0.8em;
letter-spacing: 4px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d_active {
background-color: darkgrey;
color: #fff;
}
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<ul class="tabs">
<li class="active" rel="tab1">Tab 1</li>
<li rel="tab2">Tab 2</li>
</ul>
<div class="tab_container">
<h3 class="d_active tab_drawer_heading" rel="tab1">Tab 1</h3>
<div id="tab1" class="tab_content">
<h2>Tab 1 content</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac metus augue.</p>
</div>
<!-- #tab1 -->
<h3 class="tab_drawer_heading" rel="tab2">Tab 2</h3>
<div id="tab2" class="tab_content">
<h2>Tab 2 content</h2>
<p>Nunc dui velit, scelerisque eu placerat volutpat, dapibus eu nisi. Vivamus eleifend vestibulum odio non vulputate.</p>
</div>
我在没有选择任何元素的情况下以最简单的方式解决了这个问题:
var control = false;
$(".tab_drawer_heading").click(function() {
if(control != true)
{
$("#"+d_activeTab).fadeIn();
control = true;
}
else
{
$("#"+d_activeTab).fadeOut();
control = false;
}
});
var control = false;
$(".tab_drawer_heading").click(function() {
$(".tab_content").hide();
var d_activeTab = $(this).attr("rel");
if(control != true)
{
$("#"+d_activeTab).fadeIn();
control = true;
}
else
{
$("#"+d_activeTab).fadeOut();
control = false;
}
$(".tab_drawer_heading").removeClass("d_active");
$(this).addClass("d_active");
$("ul.tabs li").removeClass("active");
$("ul.tabs li[rel^='"+d_activeTab+"']").addClass("active");
});
$("ul.tabs li").click(function() {
$(".tab_content").hide();
var activeTab = $(this).attr("rel");
$("#"+activeTab).fadeIn();
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab_drawer_heading").removeClass("d_active"); $(".tab_drawer_heading[rel^='"+activeTab+"']").addClass("d_active");
});
ul.tabs {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 50px;
border-bottom: 1px solid #333;
width: 100%;
text-transform: uppercase;
letter-spacing: 4px;
font-size: 0.88em;
margin-top: 2em;
}
ul.tabs li {
float: left;
margin: 0;
cursor: pointer;
padding: 0px 21px;
height: 50px;
line-height: 50px;
border-top: 1px solid rgba(0, 0, 0, 0.03);
border-right: 1px solid rgba(0, 0, 0, 0.03);
border-left: 1px solid rgba(0, 0, 0, 0.03);
margin-right: 10px;
background-color: rgba(0, 0, 0, 0.03);
color: grey;
overflow: hidden;
position: relative;
}
ul.tabs li:hover {
background-color: white;
color: #333;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
}
ul.tabs li.active {
background-color: #fff;
color: #333;
border-bottom: 1px solid #fff;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
display: block;
}
.tab_container {
border-bottom: 1px solid #e3e3e3;
border-top: none;
clear: both;
float: left;
width: 100%;
background: #fff;
overflow: auto;
margin-bottom: 3em;
}
.tab_content {
padding: 15px 20px;
display: none;
}
.tab_drawer_heading { display: none; }
@media screen and (max-width: 599px) {
.tabs {
display: none;
}
.tab_drawer_heading {
background-color: rgba(0, 0, 0, 0.01);
color: #333;
border-top: 1px solid #e3e3e3;
margin: 0;
padding: 14px 20px;
display: block;
font-size: 0.8em;
letter-spacing: 4px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d_active {
background-color: darkgrey;
color: #fff;
}
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<ul class="tabs">
<li class="active" rel="tab1">Tab 1</li>
<li rel="tab2">Tab 2</li>
</ul>
<h3 class="d_active tab_drawer_heading" rel="tab1">Tab 1</h3>
<div class="tab_container">
<div id="tab1" class="tab_content">
<h2>Tab 1 content</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac metus augue.</p>
</div>
<h3 class="tab_drawer_heading" rel="tab2">Tab 2</h3>
<div id="tab2" class="tab_content">
<h2>Tab 2 content</h2>
<p>Nunc dui velit, scelerisque eu placerat volutpat, dapibus eu nisi. Vivamus eleifend vestibulum odio non vulputate.</p>
</div>
我已经尝试了一些简单的解决方案来让这个 JS 与选项卡一起工作,并且一切都运行良好,除了我希望它在单击时关闭移动设备上的选项卡抽屉并且无法使其正常运行。我觉得有一个简单的解决方案,但我似乎无法弄清楚。如果能提供帮助,我们将不胜感激!
/* if in tab mode (laptop) */
$("ul.tabs li").click(function() {
$(".tab_content").hide();
var activeTab = $(this).attr("rel");
$("#"+activeTab).fadeIn();
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab_drawer_heading").removeClass("d_active");
$(".tab_drawer_heading[rel^='"+activeTab+"']").addClass("d_active");
});
/* if in drawer mode (mobile) */
$(".tab_drawer_heading").click(function() {
$(".tab_content").hide();
var d_activeTab = $(this).attr("rel");
$("#"+d_activeTab).fadeIn();
$(".tab_drawer_heading").removeClass("d_active");
$(this).addClass("d_active");
$("ul.tabs li").removeClass("active");
$("ul.tabs li[rel^='"+d_activeTab+"']").addClass("active");
});
ul.tabs {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 50px;
border-bottom: 1px solid #333;
width: 100%;
text-transform: uppercase;
letter-spacing: 4px;
font-size: 0.88em;
margin-top: 2em;
}
ul.tabs li {
float: left;
margin: 0;
cursor: pointer;
padding: 0px 21px;
height: 50px;
line-height: 50px;
border-top: 1px solid rgba(0, 0, 0, 0.03);
border-right: 1px solid rgba(0, 0, 0, 0.03);
border-left: 1px solid rgba(0, 0, 0, 0.03);
margin-right: 10px;
background-color: rgba(0, 0, 0, 0.03);
color: grey;
overflow: hidden;
position: relative;
}
ul.tabs li:hover {
background-color: white;
color: #333;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
}
ul.tabs li.active {
background-color: #fff;
color: #333;
border-bottom: 1px solid #fff;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
display: block;
}
.tab_container {
border-bottom: 1px solid #e3e3e3;
border-top: none;
clear: both;
float: left;
width: 100%;
background: #fff;
overflow: auto;
margin-bottom: 3em;
}
.tab_content {
padding: 15px 20px;
display: none;
}
.tab_drawer_heading { display: none; }
@media screen and (max-width: 599px) {
.tabs {
display: none;
}
.tab_drawer_heading {
background-color: rgba(0, 0, 0, 0.01);
color: #333;
border-top: 1px solid #e3e3e3;
margin: 0;
padding: 14px 20px;
display: block;
font-size: 0.8em;
letter-spacing: 4px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d_active {
background-color: darkgrey;
color: #fff;
}
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<ul class="tabs">
<li class="active" rel="tab1">Tab 1</li>
<li rel="tab2">Tab 2</li>
</ul>
<div class="tab_container">
<h3 class="d_active tab_drawer_heading" rel="tab1">Tab 1</h3>
<div id="tab1" class="tab_content">
<h2>Tab 1 content</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac metus augue.</p>
</div>
<!-- #tab1 -->
<h3 class="tab_drawer_heading" rel="tab2">Tab 2</h3>
<div id="tab2" class="tab_content">
<h2>Tab 2 content</h2>
<p>Nunc dui velit, scelerisque eu placerat volutpat, dapibus eu nisi. Vivamus eleifend vestibulum odio non vulputate.</p>
</div>
我在没有选择任何元素的情况下以最简单的方式解决了这个问题:
var control = false;
$(".tab_drawer_heading").click(function() {
if(control != true)
{
$("#"+d_activeTab).fadeIn();
control = true;
}
else
{
$("#"+d_activeTab).fadeOut();
control = false;
}
});
var control = false;
$(".tab_drawer_heading").click(function() {
$(".tab_content").hide();
var d_activeTab = $(this).attr("rel");
if(control != true)
{
$("#"+d_activeTab).fadeIn();
control = true;
}
else
{
$("#"+d_activeTab).fadeOut();
control = false;
}
$(".tab_drawer_heading").removeClass("d_active");
$(this).addClass("d_active");
$("ul.tabs li").removeClass("active");
$("ul.tabs li[rel^='"+d_activeTab+"']").addClass("active");
});
$("ul.tabs li").click(function() {
$(".tab_content").hide();
var activeTab = $(this).attr("rel");
$("#"+activeTab).fadeIn();
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab_drawer_heading").removeClass("d_active"); $(".tab_drawer_heading[rel^='"+activeTab+"']").addClass("d_active");
});
ul.tabs {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 50px;
border-bottom: 1px solid #333;
width: 100%;
text-transform: uppercase;
letter-spacing: 4px;
font-size: 0.88em;
margin-top: 2em;
}
ul.tabs li {
float: left;
margin: 0;
cursor: pointer;
padding: 0px 21px;
height: 50px;
line-height: 50px;
border-top: 1px solid rgba(0, 0, 0, 0.03);
border-right: 1px solid rgba(0, 0, 0, 0.03);
border-left: 1px solid rgba(0, 0, 0, 0.03);
margin-right: 10px;
background-color: rgba(0, 0, 0, 0.03);
color: grey;
overflow: hidden;
position: relative;
}
ul.tabs li:hover {
background-color: white;
color: #333;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
}
ul.tabs li.active {
background-color: #fff;
color: #333;
border-bottom: 1px solid #fff;
border-top: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
display: block;
}
.tab_container {
border-bottom: 1px solid #e3e3e3;
border-top: none;
clear: both;
float: left;
width: 100%;
background: #fff;
overflow: auto;
margin-bottom: 3em;
}
.tab_content {
padding: 15px 20px;
display: none;
}
.tab_drawer_heading { display: none; }
@media screen and (max-width: 599px) {
.tabs {
display: none;
}
.tab_drawer_heading {
background-color: rgba(0, 0, 0, 0.01);
color: #333;
border-top: 1px solid #e3e3e3;
margin: 0;
padding: 14px 20px;
display: block;
font-size: 0.8em;
letter-spacing: 4px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d_active {
background-color: darkgrey;
color: #fff;
}
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.js"></script>
<ul class="tabs">
<li class="active" rel="tab1">Tab 1</li>
<li rel="tab2">Tab 2</li>
</ul>
<h3 class="d_active tab_drawer_heading" rel="tab1">Tab 1</h3>
<div class="tab_container">
<div id="tab1" class="tab_content">
<h2>Tab 1 content</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac metus augue.</p>
</div>
<h3 class="tab_drawer_heading" rel="tab2">Tab 2</h3>
<div id="tab2" class="tab_content">
<h2>Tab 2 content</h2>
<p>Nunc dui velit, scelerisque eu placerat volutpat, dapibus eu nisi. Vivamus eleifend vestibulum odio non vulputate.</p>
</div>