I want to fade each nav li one by one. Here's my current code. It shows the whole div, now I want to fade in each li one by one with a slight delay.      
$(document).ready(function(){     $("#circleMenuBtn").click(function(){         $("#dropDownMenu").fadeIn(500);     }); }); <div class="sub-menu" id="dropDownMenu">     <ul id="navbar">         <li> First</li>         <li>Second</li>         <li>Third</li>         <li>Fourth</li>         <li>Fifth</li>     </ul> </div> .sub-menu {     position: absolute;     z-index: 1000;     color: #fff;     right: 5px;     display: none; } I tried for loops trying to fade in each li in one iteration but no success. Please share your ideas.
UPDATE: Rory McCrossan's code is perfect. Unfortunately, it's not compatible with my code that hides the menu when clicked outside it.
$(document).mouseup(function (e) {     var container = $("#dropDownMenu");      if (!container.is(e.target)        && container.has(e.target).length === 0) {        container.fadeOut(500);     } }); What went wrong? I've just started to learn JS and JQuery so please forgive me if it's a lame question.
You can use an each() call to loop through the li elements and delay() the fadeIn() animation by an incremental amount. Try this:
$("#dropDownMenu li").each(function(i) {      $(this).delay(100 * i).fadeIn(500);  });.sub-menu {      position: absolute;      z-index: 1000;      /* color: #fff;      right: 5px; */  }    .sub-menu li {      display: none;  }<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <div class="sub-menu" id="dropDownMenu">      <ul id="navbar">          <li> First</li>          <li>Second</li>          <li>Third</li>          <li>Fourth</li>          <li>Fifth</li>      </ul>  </div>If you want to increase/decrease the interval between items fading, change the value provided to the delay() method. In this example I used 100ms.
If you have a limited number of elements you could also consider using css-animations instead of a javascript solution. You can address each element using the nth-child selector and delay its animation according to its position. To make the animation stop at the end use the animation-fill-mode property.
li {   opacity: 0;   animation: fadeIn 0.9s 1;   animation-fill-mode: forwards; }  li:nth-child(5n+1) {   animation-delay: 0.5s; }  /*...*/  @keyframes fadeIn {   0% {     opacity: 0.0;   }   100% {     opacity: 1.0;   } } See this example and mind the prefixes https://jsfiddle.net/97bknLdu/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With