繁体   English   中英

单击链接时如何关闭 Foundation 顶栏菜单?

[英]How can I close the Foundation topbar menu when a link is clicked?

我在我的单页站点上使用 Zurb Foundation 的固定顶栏,它包含指向页面内位置的锚链接。 我希望每当单击展开的移动菜单中的链接时,菜单就会关闭。

目前,当点击链接时,页面会滚动,但页面顶部的菜单处于打开状态,无法查看。

在以前版本的 Foundation 中,我能够对代码进行逆向工程并找到一个简单的解决方案。 由于更新到 4.3.1 以修复顶栏的另一个问题,由于我对 javascript 的了解有限,我无法找到解决方案。

顶栏

在我看来,如果我可以在单击菜单中的链接时触发关闭菜单的事件或功能,那么它就会被修复。 以前,我将发生在链接上的代码放在第 261 行。

当移动菜单关闭时,.fixed 被添加到顶部栏周围的 div,而 .expanded 和 .fixed 从 .topbar div 中删除。

您可以尝试添加一些 jQuery 以在单击链接时折叠菜单。

您可以添加包装在脚本元素中的代码。 将它放在所有 html 元素之后(在 body 元素内)。 您也可以将它放在一个单独的 javascript 文件中,您可以像处理任何其他 javascript 文件一样获取该文件。 确保将该链接放在 jquery 链接之后。

代码本身可能非常简单,因为当您打开和关闭菜单图标时,它看起来像是 Foundation 向导航栏添加了一个名为“expanded”的类。 因此,当有人单击您的按钮时,您可以删除“扩展”类。

它应该是这样的:

jQuery(document).ready(function($) {
    $('.top-bar ul.right(or .left depending how you arranged your buttons) li').click(function() {
       $('.top-bar').removeClass('expanded');
    });
}(jQuery));

如果你给你的菜单(ul 元素)一个唯一的 id,选择器 '.top-bar ul.right(或 .left 取决于你如何安排你的按钮)li' 也可以用一个 id 调用。 在这种情况下,它将是:

jQuery(document).ready(function($) {
    $('#myMenuId li').click(function() { 
        $('.top-bar').removeClass('expanded'); 
    });
}(jQuery));

希望有帮助。

尝试:

$('#main-menu li').click(function() {
    $('.toggle-topbar').trigger('click');
});

我是第一次使用 Foundation 6,当我试图找出一种方法来在单击链接时关闭移动设备上的新顶部栏菜单时,我偶然发现了这篇文章。 我想对我的解决方案发表评论,以防其他人在 Foundation 6 上遇到这篇文章,因为它对我来说是一个很好的起点。

这是我所做的:

导航设置 - 中大断点上的水平导航,小断点上的响应切换垂直导航

                <!--  Mobile responsive toggle (hamburger menu) -->
                <div class="title-bar" data-responsive-toggle="siteNav" data-hide-for="medium">
                    <button class="menu-icon" type="button" data-toggle></button>
                    <div class="title-bar-title">Menu</div>
                </div>

                <!-- Nav items -->
                <div id="siteNav" class="top-bar"> 
                    <p><ul class="vertical medium-horizontal menu text-center">
                        <li ><a href="#home" onClick="">HOME</a></li>
                        <li ><a href="#services">SERVICES</a></li>
                        <li ><a href="#contact">CONTACT</a></li>
                    </ul></p>
                </div>

然后我在这篇文章中根据之前的解决方案添加了一个修改过的 jquery 版本(感谢amazingBastard 和 Cerbrus):

$(document).ready(function($) {
        $('#siteNav li').click(function() { 
            if(Foundation.MediaQuery.current == 'small'){
                $('#siteNav').css('display', 'none'); 
            }
        });
    });

在 Foundation 6 中,css 选择器“display”被添加到展开的菜单中,并设置为“display:none”(隐藏)或“display:block”(展开)。 这个 jquery 代码段在我使用的默认菜单类中单击导航项时,针对小型(移动设备)检查当前断点,如果为 true,则将 css 选择器更改为“display:none”,从而有效地关闭菜单切换。

更简洁的方式(而不是触发点击或删除类):

 $(document).on("click", ".top-bar li", function () {
     Foundation.libs.topbar.toggle($('.top-bar'));
 });

这对我有用:

setTimeout(function() {$(document).foundation('topbar', 'reflow')}, 500);

让我知道这是否也适用于您。 (也许也将“500”减少到不到半秒的时间)。

这是一个扩展版本:

<script type="text/javascript">
function hideDropDown() {
  setTimeout(function() {$(document).foundation('topbar', 'reflow')}, 500);
}
</script>
<nav class="top-bar" data-topbar role="navigation">
  <section class="top-bar-section">
    <!-- Right Nav Section -->
    <ul class="right">
      <li class="has-dropdown">
        <a href="#">My menu</a>
        <ul class="dropdown">
          <li><a onclick="hideDropDown()" target="another_page" href="/some/where">Menu item</a></li>
        </ul>
      </li>
    </ul>
  </section>
</nav>

我在Foundation 6 dropdown的close函数的代码中复制了一些代码。

为了使它工作,我还必须在菜单元素上设置选项data-disable-hover="true否则菜单不会在用户第一次单击其中的元素时关闭。

我在 AngularJS 中编写了我的代码并使其工作。 我猜它对于 jQuery 来说看起来像这样。 换句话说,代码没有经过测试。

$('#main-menu li').click(function closeDropdown() {
     var $toClose = $('#main-menu');

     if(!$toClose){
        return;
     }

     var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;

     if (somethingToClose) {
        $toClose.find('li.is-active').add($toClose).attr({
           'aria-expanded': false,
           'data-is-click': false
        }).removeClass('is-active');

        $toClose.find('ul.js-dropdown-active').attr({
           'aria-hidden': true
        }).removeClass('js-dropdown-active');
     }
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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