首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在屏幕任意位置单击“退出”时如何隐藏下拉菜单

在屏幕任意位置单击“退出”时如何隐藏下拉菜单
EN

Stack Overflow用户
提问于 2018-06-21 16:44:03
回答 1查看 205关注 0票数 1

我有下面的下拉菜单代码,如果菜单栏宽度不足以显示所有项目取决于屏幕宽度,则此代码用于将项目放在下拉列表中。所有工作正常,但我希望当单击out隐藏下拉菜单时,我尝试了。鼠标,但没有工作,我希望您能帮助我所有的工作良好,但我希望当单击外隐藏下拉菜单,我尝试了。鼠标,,但没有工作,代码是很大的。

代码语言:javascript
复制
   <script>
    var $nav = $('.greedy-nav');
    var $btn = $('.greedy-nav button');
     var $vlinks = $('.greedy-nav .visible-links');
    var $hlinks = $('.greedy-nav .hidden-links');
    var breaks = [];
    function updateNav() {
    var availableSpace = $btn.hasClass('hidden') ? $nav.width() : $nav.width() - 
    $btn.width() - 30;
    if($vlinks.width() > availableSpace) {
    breaks.push($vlinks.width());
    $vlinks.children().last().prependTo($hlinks);
    if($btn.hasClass('hidden')) {
    $btn.removeClass('hidden');
 }
  } else {
  if(availableSpace > breaks[breaks.length-1]) {
  $hlinks.children().first().appendTo($vlinks);
  breaks.pop();
  }
 if(breaks.length < 1) {
  $btn.addClass('hidden');
  $hlinks.addClass('hidden');
 }
 }
 $btn.attr("count", breaks.length);
 if($vlinks.width() > availableSpace) {
 updateNav();
}
}
 $(window).resize(function() {
  updateNav();
  });

 $btn.on('click', function() {
 $hlinks.toggleClass("hidden");
  });
  updateNav();
 </script>

代码语言:javascript
复制
 <div id="shouldPin">
 <div class="ItemListForMenu_shouldPin" id="CategoriesList">
<div class="MenuCategoriesList_categoriesSection">
<nav class='greedy-nav'>
<button id="mybtn">More</button>
<ul id="mainNav" class='visible-links'>
<li><a href='' class="MainCategory">Appetizers</a></li>
<li><a href='' class="MainCategory">Soups</a></li>
<li><a href='' class="MainCategory">Salads</a></li>
<li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
 <li><a href='' class="MainCategory">Appetizers</a></li>
<li><a href='' class="MainCategory">Soups</a></li>
<li><a href='' class="MainCategory">Salads</a></li>
<li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
<li><a href='' class="MainCategory">Appetizers</a></li>
<li><a href='' class="MainCategory">Soups</a></li>
<li><a href='' class="MainCategory">Salads</a></li>
<li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
<li><a href='' class="MainCategory">Appetizers</a></li>
<li><a href='' class="MainCategory">Soups</a></li>
<li><a href='' class="MainCategory">Salads</a></li>
<li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
 </ul>
    <ul id="menu_dropdown" class='hidden-links hidden'></ul>
   </nav>
        </div>
     </div>
    </div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 19:20:45

您可以使用$.contains()来确定某个元素是否在另一个元素的内部。您需要在整个文档上创建一个单击处理程序,并检查单击target是否在下拉列表中:

代码语言:javascript
复制
$(document).on('click', function(e) {
    const dropdown = $('.dropdown');
    if(!$.contains(dropdown, e.target) {
        // Close dropdown
        $(dropdown).toggleClass('hidden');
    }
});

为了保持应用程序的性能,您只想在document下拉列表打开时将单击事件添加到中,并在下拉列表关闭时从document中删除单击事件。

编辑:这里是一个工作片段,演示了我的建议。您首先检查下拉列表是否已经隐藏,然后检查用户是否在下拉列表中单击了链接。如果这两个都不是真的,那么它将隐藏第二个下拉列表。单击菜单外部将关闭第二个下拉列表:

代码语言:javascript
复制
var $nav = $('.greedy-nav');
var $btn = $('.greedy-nav button');
var $vlinks = $('.greedy-nav .visible-links');
var $hlinks = $('.greedy-nav .hidden-links');
var breaks = [];

function updateNav() {
  var availableSpace = $btn.hasClass('hidden') ? $nav.width() : $nav.width() -
    $btn.width() - 30;
  if ($vlinks.width() > availableSpace) {
    breaks.push($vlinks.width());
    $vlinks.children().last().prependTo($hlinks);
    if ($btn.hasClass('hidden')) {
      $btn.removeClass('hidden');
    }
  } else {
    if (availableSpace > breaks[breaks.length - 1]) {
      $hlinks.children().first().appendTo($vlinks);
      breaks.pop();
    }
    if (breaks.length < 1) {
      $btn.addClass('hidden');
      $hlinks.addClass('hidden');
    }
  }
  $btn.attr("count", breaks.length);
  if ($vlinks.width() > availableSpace) {
    //updateNav();
  }
}
$(window).resize(function() {
  //updateNav();
});

$btn.on('click', function(e) {
  e.stopPropagation();
  $hlinks.toggleClass("hidden");
});

updateNav();

$(document).on('click', function(e) {
  // Check if the dropdown is already hidden
  // Check if the clicked target exists in the hidden dropdown
  // Check if the clicked target exists in the visible dropdown
  // If none are true, then hide the dropdown
  if (!$($hlinks).hasClass('hidden') &&
    !$.contains($hlinks[0], e.target) &&
    !$.contains($vlinks[0], e.target)) {
    $($hlinks).addClass('hidden');
  }
});
代码语言:javascript
复制
.hidden {
  display: none;
}

.visible-links {
  background: #ededed;
}

.hidden-links {
  background: #222;
}

.hidden-links a {
  color: #FFF;
}

#shouldPin {
  padding-bottom: 300px;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="shouldPin">
  <div class="ItemListForMenu_shouldPin" id="CategoriesList">
    <div class="MenuCategoriesList_categoriesSection">
      <nav class='greedy-nav'>
        <button id="mybtn">More</button>
        <ul id="mainNav" class='visible-links'>
          <li>Appetizers</li>
          <li><a href='' class="MainCategory">Soups</a></li>
          <li><a href='' class="MainCategory">Salads</a></li>
          <li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
          <li><a href='' class="MainCategory">Appetizers</a></li>
          <li><a href='' class="MainCategory">Soups</a></li>
          <li><a href='' class="MainCategory">Salads</a></li>
          <li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
          <li><a href='' class="MainCategory">Appetizers</a></li>
          <li><a href='' class="MainCategory">Soups</a></li>
          <li><a href='' class="MainCategory">Salads</a></li>
          <li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
          <li><a href='' class="MainCategory">Appetizers</a></li>
          <li><a href='' class="MainCategory">Soups</a></li>
          <li><a href='' class="MainCategory">Salads</a></li>
          <li><a href='' class="MainCategory">Sashimi or Sushi</a></li>
        </ul>
        <ul id="menu_dropdown" class='hidden-links hidden'></ul>
      </nav>
    </div>
  </div>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50973688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档