【问题标题】:Click the same item to close and open dropdown only when the previous is closed单击同一项目关闭并仅在前一个关闭时打开下拉菜单
【发布时间】:2018-05-03 11:08:58
【问题描述】:

我需要为我正在构建的导航添加 2 个额外功能:

1 - 当我点击一个活动的导航项时,drop-down 应该关闭,并且应该从主容器中删除 .black-bg 类以及导航项目。目前,这只适用于我在drop-down之外点击。

2 - 当下拉菜单打开并且您点击打开第二个下拉菜单时,第二个必须等到第一个关闭。目前两个动画同时发生。

See Demo

$(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");
    }
});

我真的坚持这一点。我希望有人能帮助我。 谢谢。

【问题讨论】:

    标签: jquery html css dropdown nav


    【解决方案1】:

    这对你很有效。

    以下代码是我添加的更改。

    $(".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);
    
      }
    
    });
    

    codepen 链接

    【讨论】:

      【解决方案2】:

      我建议你这样做:
      (见我代码中的 cmets)

      // 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>

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 1970-01-01
        • 2018-10-18
        • 2013-04-11
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        相关资源
        最近更新 更多