javascript - 隐藏单击其中的链接后打开的每个菜单
问题描述
我正在香草 JS 中制作 Off Canvas 侧边栏下拉菜单。几乎在我的 JS 代码的底部,我创建了一个函数,可以在有人单击 href 链接后将侧边栏隐藏在画布之外。我还制作了一个隐藏和显示下拉菜单的隐藏子菜单级别的功能,以便单击它们。但是现在我需要一个函数来在用户单击 href 链接时从侧边栏中关闭每个打开的下拉菜单,就在让用户进入另一个站点页面之前。然后,当用户再次打开菜单时,所有下拉菜单都将关闭。注意:'aTags' 是指向每个可点击 href 元素的变量的名称任何建议都会非常有帮助!
const open = document.querySelector('.open');
let list_items = document.querySelectorAll('#subb');
let overlay = document.querySelector('.overlay');
let aTags = open.getElementsByClassName('ilink');
// Show and Hide sidebar when click icon
let toggles = document.querySelectorAll(".c-hamburger");
for (let i = toggles.length - 1; i >= 0; i--) {
let toggle = toggles[i];
toggleHandler(toggle);
};
function toggleHandler(toggle) {
toggle.addEventListener("click", function(e) {
e.preventDefault();
if (this.classList.contains("is-active") === true) {
this.classList.remove("is-active");
open.classList.remove('oppenned');
overlay.className = 'overlay';
} else {
this.classList.add("is-active");
open.classList.add('oppenned');
overlay.className += ' open';
}
});
window.addEventListener('click', function(event) {
if (event.target === overlay) {
toggle.classList.remove("is-active");
open.classList.remove('oppenned');
overlay.className = 'overlay';
}
});
// hide sidebar off canvas when click a menu link
for (let i = 0; i < aTags.length; i++) {
aTags[i].addEventListener("click", close);
}
function close(e) {
e.stopPropagation();
open.classList.remove('oppenned');
toggle.classList.remove("is-active");
overlay.className = 'overlay';
}
// Show and Hide the hidden Submenu ul
for (let i = 0; i < list_items.length; i++) {
list_items[i].addEventListener("click", show);
}
function show(e) {
e.stopPropagation();
this.classList.toggle("myClass");
}
}
.sub-menu ul ul {
max-height: 0;
position: relative;
top: 0;
left: 0;
opacity: 0;
visibility: hidden;
transition: all 0.6s ease-out;
background: white;
}
#subb.myClass>ul {
max-height: 32em;
visibility: visible;
opacity: 1;
}
<nav id="nav" class="sub-menu open">
<ul class="list-unstyled">
<li id="subb">
<a class="link">Soluciones</a>
<ul>
<li id="subb">
<a class="link">Correo y herramientas colaborativas</a>
<ul>
<li><a class="link ilink" href="https://www.google.com/">Google Workspace</a></li>
<li><a class="link ilink href=" https://www.google.com/ "">Google for Education</a></li>
<li><a class="link ilink" href="https://www.google.com/">Microsoft 365</a></li>
</ul>
</li>
</ul>
解决方案
推荐阅读
- elasticsearch - ElasticSearch 搜索有时无法搜索文档
- c# - 如何在 Forge API 中向元素添加参数
- javascript - jQuery可拖动功能导致PrimeFaces JSF页面出错
- html - CSS:为什么颜色代码 #999 的颜色在 Chrome 和 Firefox 中不同?
- azure - “Add-AzureAccount”出现错误:服务返回的请求与请求中的用户“XXX”不匹配
- sql - 删除正则表达式匹配后获取剩余内容
- javascript - 在 promise 调用中设置请求标头时,标头未设置为服务器
- javascript - 在angularjs中带有表格数据的引导轮播
- javascript - [Vue 警告]:缺少必需的道具
- java - 我不想从 axboot 记录 jpa 查询