单击相同的项目以关闭并仅在上一个关闭时打开下拉列表
Click the same item to close and open dropdown only when the previous is closed
我需要为我正在构建的导航添加 2 个额外功能:
1 - 当我点击一个活动的导航项时,drop-down
应该关闭并且 .black-bg class 应该从主菜单中删除-container 以及导航项中的 .active class。目前,这仅在我在 drop-down
.
之外单击时有效
2 - 当一个下拉菜单打开并且您点击打开第二个时,第二个必须等到第一个关闭。目前两个动画同时发生。
$(document).ready(function() {
$(".click").on("click", function(evt) {
evt.stopPropagation();
if ($(this).hasClass("active")) {
return;
}
$(".active").parent().find(".showup").slideToggle(200);
$(".active").toggleClass("active");
$(this).toggleClass("active");
$(this).parent().find(".showup").slideToggle(200);
if (!$(".main-container").hasClass("black-bg")) {
$(".main-container").toggleClass("black-bg");
}
});
$(".showup").on("click", function(evt) {
evt.stopPropagation();
});
});
$(document).on("click", function() {
$(".active").parent().find(".showup").slideUp(50);
$(".active").toggleClass("active");
if ($(".main-container").hasClass("black-bg")) {
$(".main-container").toggleClass("black-bg");
}
});
我真的坚持这一点。我希望有人能帮助我。
谢谢。
这很适合你。
下面的代码是我修改的。
$(".click").on("click", function(evt) {
evt.stopPropagation();
var th = $(this);
if (th.hasClass("active")) {
th.removeClass("active");
th.parent().find(".showup").slideUp(200);
$(".main-container").removeClass("black-bg");
} else {
$(".active").removeClass("active");
$(".showup").slideUp(200);
$(".main-container").removeClass("black-bg");
setTimeout(function() {
th.addClass("active");
th.parent().find(".showup").slideDown(200);
$(".main-container").addClass("black-bg");
}, 250);
}
});
codepenlink
我建议你这样做:
(见我代码中的注释)
// Added functions, because it's handy:
// Any global modification is to be made only there!
function menus_close() {
$(".active").parent().find(".showup").slideUp(200); // 200 to better see it in action
$(".active").removeClass("active");
$(".main-container").removeClass("black-bg");
}
function menu_open(elm) {
setTimeout(function() { // Fire the function after some time (see below)
elm.addClass("active");
elm.parent().find(".showup").slideDown(200);
$(".main-container").addClass("black-bg");
}, 200); // Here is the time
}
$(document).ready(function() {
$(".click").on("click", function(evt) {
evt.stopPropagation();
if ($(this).hasClass("active")) {
menus_close();
return;
}else{
menus_close();
menu_open($(this));
}
});
$(".showup").on("click", function(evt) {
evt.stopPropagation();
});
});
$(document).on("click", function() {
menus_close();
});
* {
box-sizing: border-box;
}
body {
margin: 0;
}
.nav-wrapper {
width: 100%;
overflow: hidden;
background: #424242;
}
nav {
width: 100%;
/* modified to work in snippet */
margin: auto;
overflow: hidden;
background: #424242;
}
.nav-content {
width: 100%;
z-index: 999;
background: #ccc;
}
.top-bar-section {
float: right;
}
.top-bar-section a.active {
background: #f00;
}
.showup {
display: none;
background: #ccc;
position: absolute;
width: 100%;
top: 70px;
left: 0;
z-index: 99;
padding: 30px 15px 30px 20px;
}
p {
font-size: 14px;
line-height: 1.4;
}
li.nav-item {
display: inline-block;
background: #f5f5f5;
}
li.nav-item a {
display: block;
text-decoration: none;
padding: 10px;
}
.main-container {
width: 80%;
height: 400px;
margin: auto;
}
.black-bg {
background: #000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nav-wrapper">
<nav>
<div class="top-bar-section">
<ul>
<li class="nav-item">
<a href="#" class="click">Nav item 1</a>
<div class="showup">
<div class="nav-content">
<p>
Dropdown for Nav Item 1.
</p>
</div>
</div>
</li>
<li class="nav-item">
<a href="#" class="click">Nav item 2</a>
<div class="showup">
<div class="nav-content">
<p>
Dropdown for Nav Item 2.
</p>
</div>
</div>
</li>
<li class="nav-item">
<a href="#" class="click">Nav item 3</a>
</li>
<li class="nav-item">
<a href="#" class="click">Nav item 4</a>
</li>
</ul>
</div>
</nav>
</div>
<div class="main-container">
</div>
希望对您有所帮助。
我需要为我正在构建的导航添加 2 个额外功能:
1 - 当我点击一个活动的导航项时,drop-down
应该关闭并且 .black-bg class 应该从主菜单中删除-container 以及导航项中的 .active class。目前,这仅在我在 drop-down
.
2 - 当一个下拉菜单打开并且您点击打开第二个时,第二个必须等到第一个关闭。目前两个动画同时发生。
$(document).ready(function() {
$(".click").on("click", function(evt) {
evt.stopPropagation();
if ($(this).hasClass("active")) {
return;
}
$(".active").parent().find(".showup").slideToggle(200);
$(".active").toggleClass("active");
$(this).toggleClass("active");
$(this).parent().find(".showup").slideToggle(200);
if (!$(".main-container").hasClass("black-bg")) {
$(".main-container").toggleClass("black-bg");
}
});
$(".showup").on("click", function(evt) {
evt.stopPropagation();
});
});
$(document).on("click", function() {
$(".active").parent().find(".showup").slideUp(50);
$(".active").toggleClass("active");
if ($(".main-container").hasClass("black-bg")) {
$(".main-container").toggleClass("black-bg");
}
});
我真的坚持这一点。我希望有人能帮助我。 谢谢。
这很适合你。
下面的代码是我修改的。
$(".click").on("click", function(evt) {
evt.stopPropagation();
var th = $(this);
if (th.hasClass("active")) {
th.removeClass("active");
th.parent().find(".showup").slideUp(200);
$(".main-container").removeClass("black-bg");
} else {
$(".active").removeClass("active");
$(".showup").slideUp(200);
$(".main-container").removeClass("black-bg");
setTimeout(function() {
th.addClass("active");
th.parent().find(".showup").slideDown(200);
$(".main-container").addClass("black-bg");
}, 250);
}
});
codepenlink
我建议你这样做:
(见我代码中的注释)
// Added functions, because it's handy:
// Any global modification is to be made only there!
function menus_close() {
$(".active").parent().find(".showup").slideUp(200); // 200 to better see it in action
$(".active").removeClass("active");
$(".main-container").removeClass("black-bg");
}
function menu_open(elm) {
setTimeout(function() { // Fire the function after some time (see below)
elm.addClass("active");
elm.parent().find(".showup").slideDown(200);
$(".main-container").addClass("black-bg");
}, 200); // Here is the time
}
$(document).ready(function() {
$(".click").on("click", function(evt) {
evt.stopPropagation();
if ($(this).hasClass("active")) {
menus_close();
return;
}else{
menus_close();
menu_open($(this));
}
});
$(".showup").on("click", function(evt) {
evt.stopPropagation();
});
});
$(document).on("click", function() {
menus_close();
});
* {
box-sizing: border-box;
}
body {
margin: 0;
}
.nav-wrapper {
width: 100%;
overflow: hidden;
background: #424242;
}
nav {
width: 100%;
/* modified to work in snippet */
margin: auto;
overflow: hidden;
background: #424242;
}
.nav-content {
width: 100%;
z-index: 999;
background: #ccc;
}
.top-bar-section {
float: right;
}
.top-bar-section a.active {
background: #f00;
}
.showup {
display: none;
background: #ccc;
position: absolute;
width: 100%;
top: 70px;
left: 0;
z-index: 99;
padding: 30px 15px 30px 20px;
}
p {
font-size: 14px;
line-height: 1.4;
}
li.nav-item {
display: inline-block;
background: #f5f5f5;
}
li.nav-item a {
display: block;
text-decoration: none;
padding: 10px;
}
.main-container {
width: 80%;
height: 400px;
margin: auto;
}
.black-bg {
background: #000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nav-wrapper">
<nav>
<div class="top-bar-section">
<ul>
<li class="nav-item">
<a href="#" class="click">Nav item 1</a>
<div class="showup">
<div class="nav-content">
<p>
Dropdown for Nav Item 1.
</p>
</div>
</div>
</li>
<li class="nav-item">
<a href="#" class="click">Nav item 2</a>
<div class="showup">
<div class="nav-content">
<p>
Dropdown for Nav Item 2.
</p>
</div>
</div>
</li>
<li class="nav-item">
<a href="#" class="click">Nav item 3</a>
</li>
<li class="nav-item">
<a href="#" class="click">Nav item 4</a>
</li>
</ul>
</div>
</nav>
</div>
<div class="main-container">
</div>
希望对您有所帮助。