并在点击导航项和外部时删除 类
And and remove classes when click on nav item and outside
我正在尝试构建需要执行以下操作的棘手导航菜单:
单击导航项时,应将 .active class 添加到该项目并从前一个项目中删除。
当一个下拉菜单打开并且您单击打开另一个下拉菜单时,前一个下拉菜单应该会关闭,而新的下拉菜单应该会单击一次打开。
当点击一个导航项目时,它应该打开它各自的下拉容器(目前它会同时打开每个下拉菜单。)
它应该在它下面添加 .black-bg class 到 main-container 。
当单击下拉列表外的任何地方时,应删除其活动 class .active 以及 class .black- bg in main-container 在它下面。
JS
$(document).ready(function() {
$(".click").on("click", function(evt) {
evt.stopPropagation();
$(this).toggleClass("active");
$(".showup").slideToggle(200);
$(".main-container").toggleClass("black-bg");
});
$(".showup").on("click", function(evt) {
evt.stopPropagation();
});
});
$(document).on("click", function() {
$(".showup").slideUp(50);
});
这是我到目前为止想出的:
查看演示
我希望以上内容有意义并且有人可以帮助我,因为我真的坚持使用这个导航。
非常感谢!
我建议不要为此使用 jQuery,因为您 运行 遇到的确切问题。尝试使用 Vue or Preact
但是,如果您坚持使用 jQuery,您的点击功能应该 select 具有 "active" 的项目,并相应地修改它及其兄弟。
https://codepen.io/anon/pen/aGwdXO
$(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");
}
});
检查这个。只需在每个菜单项中添加 class showup1、showup2 等和 data-showup="1", data-showup="2" 属性。 (在导航项目 1 和 2 中工作)。
$(".click").on("click", function(evt) {
evt.stopPropagation();
var showup = $(this).data('showup');
if(!$(this).hasClass('active')){
$('.active').removeClass('active');
$(this).addClass("active");
$(".showup").hide();
$(".showup"+showup).slideToggle(200);
$(".main-container").addClass("black-bg");
});
我正在尝试构建需要执行以下操作的棘手导航菜单:
单击导航项时,应将 .active class 添加到该项目并从前一个项目中删除。
当一个下拉菜单打开并且您单击打开另一个下拉菜单时,前一个下拉菜单应该会关闭,而新的下拉菜单应该会单击一次打开。
当点击一个导航项目时,它应该打开它各自的下拉容器(目前它会同时打开每个下拉菜单。) 它应该在它下面添加 .black-bg class 到 main-container 。
当单击下拉列表外的任何地方时,应删除其活动 class .active 以及 class .black- bg in main-container 在它下面。
JS
$(document).ready(function() {
$(".click").on("click", function(evt) {
evt.stopPropagation();
$(this).toggleClass("active");
$(".showup").slideToggle(200);
$(".main-container").toggleClass("black-bg");
});
$(".showup").on("click", function(evt) {
evt.stopPropagation();
});
});
$(document).on("click", function() {
$(".showup").slideUp(50);
});
这是我到目前为止想出的:
查看演示
我希望以上内容有意义并且有人可以帮助我,因为我真的坚持使用这个导航。
非常感谢!
我建议不要为此使用 jQuery,因为您 运行 遇到的确切问题。尝试使用 Vue or Preact
但是,如果您坚持使用 jQuery,您的点击功能应该 select 具有 "active" 的项目,并相应地修改它及其兄弟。
https://codepen.io/anon/pen/aGwdXO
$(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");
}
});
检查这个。只需在每个菜单项中添加 class showup1、showup2 等和 data-showup="1", data-showup="2" 属性。 (在导航项目 1 和 2 中工作)。
$(".click").on("click", function(evt) {
evt.stopPropagation();
var showup = $(this).data('showup');
if(!$(this).hasClass('active')){
$('.active').removeClass('active');
$(this).addClass("active");
$(".showup").hide();
$(".showup"+showup).slideToggle(200);
$(".main-container").addClass("black-bg");
});