简体   繁体   中英

JavaScript How to close one drop down when another one clicked to open. No Jquery

I have a lot of <ul> <li> s and every <ul> has it's own drop down. I want to have only one drop down open at a time. If I click to open one, then the one which is already opened needs to be closed.

 function toggleClass(element, className) { if (!element || !className) { return; } var classString = element.className, nameIndex = classString.indexOf(className); if (nameIndex == -1) { classString += ' ' + className; } else { classString = classString.substr(0, nameIndex) + classString.substr(nameIndex + className.length); } element.className = classString; } function dropDown(el) { toggleClass(el.nextElementSibling, 'overlayOpen'); } 
 ul { width: 200px; } li { margin: 0; font-size: 20px; line-height: 50px; width: 100%; cursor: pointer; background-color: red; overflow: hidden; } .overlayOpen { opacity: 1 !important; height: 50px !important; width: 100% !important; } .overlay { width: 100%; z-index: 1000; background-color: green; overflow: hidden; max-width: 800px; opacity: 0; height: 0; width: 0; -webkit-transition: width 0.2s, height 0.2s, opacity 0.2s ease; -moz-transition: width 0.2s, height 0.2s, opacity 0.2s ease; -o-transition: width 0.2s, height 0.2s, opacity 0.2s ease; -ms-transition: width 0.2s, height 0.2s, opacity 0.2s ease; transition: width 0.2s, height 0.2s, opacity 0.2s ease; } 
 <ul> <li id="1" onclick='dropDown(this)'>example</li> <li id="overlay_1" class='overlay'>Hidden stuff</li> </ul> <ul> <li id="2" onclick='dropDown(this)'>example</li> <li id="overlay_2" class='overlay'>Hidden stuff</li> </ul> 

You could just remove the overlayOpen class from all elements prior to opening the clicked element:

function dropDown(el) {
  Array.from(document.querySelectorAll('.overlayOpen'))
       .filter(elem => elem !== el.nextElementSibling)
       .forEach(element => element.classList.remove('overlayOpen'));
  toggleClass(el.nextElementSibling, 'overlayOpen');
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM