【问题标题】:jQuery solution for keeping Dropdown submenu inside screen将下拉子菜单保留在屏幕内的 jQuery 解决方案
【发布时间】:2019-10-01 14:12:48
【问题描述】:

我正在为我的下拉菜单使用引导程序。但它有一个问题,

如果我的下拉菜单有多级子菜单,则它会显示在屏幕外,并出现底部滚动条。

如何将子菜单保留在屏幕内,我需要一个 jQuery 解决方案。

查看我的截图


这里是游乐场:

http://jsfiddle.net/howtoplease/svLKN/


这里是下拉 HTML

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
      <div class="container-fluid">
        <div class="nav-collapse">
          <ul class="nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li class="dropdown">
              <a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
              <ul class="dropdown-menu">
                <li>
                    <a href="#">2-level Dropdown <i class="icon-arrow-right"></i></a>
                    <ul class="dropdown-menu sub-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li class="divider"></li>
                        <li class="nav-header">Nav header</li>
                        <li><a href="#">Separated link</a></li>
                        <li><a href="#">One more separated link</a></li>
                    </ul>
                </li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li class="divider"></li>
                <li class="nav-header">Nav header</li>
                <li><a href="#">Separated link</a></li>
                <li><a href="#">One more separated link</a></li>
              </ul>
            </li>
          </ul>         
        </div><!-- /.nav-collapse -->
      </div>
  </div>
</div>

【问题讨论】:

  • 如果不是屏幕外,您希望下拉内容出现在哪里?
  • 与其他下拉菜单一样,位于父菜单的左侧。

标签: jquery twitter-bootstrap


【解决方案1】:

这个怎么样:它检查子菜单是否会溢出并根据子菜单的宽度修改它的位置,使其在另一边

$('.sub-menu').parent().hover(function() {
    var menu = $(this).find("ul");
    var menupos = $(menu).offset();

    if (menupos.left + menu.width() > $(window).width()) {
        var newpos = -$(menu).width();
        menu.css({ left: newpos });    
    }
});

http://jsfiddle.net/svLKN/4/

【讨论】:

  • 非常感谢:) 但如果您的子菜单中有更深的层,用户 children("ul")find("ul") 更好
  • $('&gt; .dropdown-menu',this) 可能是一个更好的过滤器。比$(this).find("ul")。从技术上讲,它的工作原理与children 相同,但jQuery 可能会在单个调用中对其进行优化。
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多