javascript - 确定菜单项是否溢出,然后显示移动菜单

标签 javascript jquery html css

我正在为我的网站构建一种新型的响应式菜单,我认为它需要一些 JavaScript。我不太擅长 JavaScript,所以我希望有人可以通过提供指导、代码示例或可以帮助提供解决方案的网站链接来帮助我。

基本上,我有两个导航菜单,它们的内容几乎相同,除了第一个菜单具有在宽浏览器上查看时可见的所有链接。第一个菜单的包含 div 有 overflow:hidden,这样当浏览器调整大小时不再足够宽以在一行中容纳所有列表项时,一些列表项将在溢出时从 View 中隐藏。第一个菜单的样式也是水平导航栏。

另一方面,第二个菜单是一个下拉菜单,将通过单击“更多”链接触发。第二个菜单上的列表项设置为 display:none

这就是我想要发生的事情。当第一个菜单上的列表项溢出并隐藏时,我希望第二个菜单上的相应菜单项变为 display:block。换句话说,如果

<li id="desktop_tenth">tenth</li>

被隐藏,因为它不再适合包含的 div,即

<li id="mobile_tenth">tenth</li>

变为可见(单击“更多”链接时)。我可以使用 CSS3 上的媒体查询来完成此操作,但我更喜欢 JavaScript 解决方案,所以我希望有人能帮助我。

<div style="overflow:hidden; width: 100%;">
    <ul id="desktop">
        <li id="desktop_first">first</li>
        <li id="desktop_second">second</li>
        ...
        <li id="desktop_tenth">tenth</li>
    </ul>
</div>
<div class="dropdown_menu">
    <a id="toggle" href="#">More</a>
    <ul id="mobile">
        <li id="mobile_first">first</li>
        <li id="mobile_second">second</li>
        ...
        <li id="mobile_tenth">tenth</li>
    </ul>
</div>

另一种方法是从

开始
<div class="dropdown_menu">
    <a id="toggle" href="#">More</a>
    <ul id="mobile">
        <!--- no li inside this ul by default --->
    </ul>
</div>

第一个菜单中隐藏(或包装)的任何 li 都将附加到

<ul id="mobile">

</ul>

作为列表项。

最佳答案

为菜单的 div(例如 desktopMenumobileMenu)指定 id,如下所示:

<div id="desktopMenu" style="overflow:hidden; width: 100%;">

还有这个:

<div id="mobileMenu" class="dropdown_menu">

并使用以下脚本:

var desktopMenu = document.getElementById('desktopMenu'), mobileMenu = document.getElementById('mobileMenu');

desktopMenu.style.display = 'none';
mobileMenu.style.display = 'none';

if (desktopMenu.offsetHeight < desktopMenu.scrollHeight || desktopMenu.offsetWidth < desktopMenu.scrollWidth) {
    mobileMenu.style.display = 'block';
} else {
    desktopMenu.style.display = 'block';
}

默认隐藏两个菜单,然后判断desktopMenu div是否溢出。如果是,则显示移动菜单,如果不是,则显示桌面菜单。使用 jQuery 的解决方案不过会干净得多。

关于javascript - 确定菜单项是否溢出,然后显示移动菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822890/

相关文章:

javascript - 如何在 JavaScript 中继承私有(private)成员?

ruby-on-rails - jQuery ajax 请求未触发 Rails Controller 的 JS 响应?

javascript - ng-animate 不与 ng-show 一起使用

javascript - 播放 html5 的 Audio 对象的多个实例

javascript - 下拉列表中的 Bootstrap 搜索表单

javascript - 添加包含下拉列表和动态内容的 div,以及更多 JS

javascript - jQuery 实时处理程序但对于每个()?

javascript - 当选择框更改时调用 Controller 方法

javascript - 如何使用 ngClass 做 if-else?

Jquery MVC 4 客户端验证不起作用