jquery - 有没有人见过会动态调整其大小的 jQuery 水平导航菜单?

标签 jquery html css responsive-design navigation

我有一个水平样式的元素列表:

选项 1 |选项 2 |选项 3 |选项 4 |更多

现在列表实际上很长(20 个选项)。我想让菜单动态调整并填写一个下拉列表,当您用无法在用户屏幕上显示的选项 X 突出显示更多选项时出现。

我见过一些全有或全无的菜单,这些菜单可以通过响应式布局从移动设备等的水平列表中创建一个“汉堡包”菜单……但我似乎找不到一个将一次动态地删除一个选项,并根据用户的屏幕宽度将它们填充到“更多”菜单中。

有没有人见过这样的事情并能指出正确的方向?

非常感谢!

最佳答案

你可以轻松自己做,看看这个Fiddle ,或运行下面的代码片段(整页):

$(document).on('ready', function () {
    function getHiddenItems() {
        var isOneLine = true;
        var topPosition = false;
        var invisibleItems = $('<ul/>');
        $('.menu li').each(function () {
            var thisPosition = $(this).position();
            if (topPosition === false) {
                topPosition = thisPosition.top;
            } else if (thisPosition.top > topPosition) {
                invisibleItems.append($(this).clone());
                isOneLine = false;
            };
        });
        return isOneLine ? false : invisibleItems;
    };

    function checkMenu() {
        $('.more').hide();
        var hiddenItems = getHiddenItems();
        if (!hiddenItems) {

            $('.more_menu').html('');
        } else {
            $('.more').show();
            /* What items are not visible now? */
            hiddenItems = getHiddenItems();
            $('.more_menu').html('<ul>' + hiddenItems.html() + '</ul>');
        };
    };
    $('.more').on('click', function (e) {
        e.preventDefault();
        $('.more').toggleClass('more_menu_opened');
        $('.more_menu').toggleClass('active');
    });
    $(window).on('resize', checkMenu);
    checkMenu();
});
* {
    margin: 0;
    padding: 0;
}
body {
    margin: 20px 0;
    font-family: Arial, sans-serif;
}
.menu {
    list-style-type: none;
    height: 35px;
    overflow: hidden;
}
.more_menu {
    display: none;
}
.more_menu.active {
    display: block;
}
.menu li {
    display: block;
    float: left;
    height: 35px;
    line-height: 35px;
    white-space: nowrap;
    padding: 0 10px;
}
.more {
    display: block;
    float: right;
    height: 35px;
    line-height: 35px;
    white-space: nowrap;
    padding: 0 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="more" href="#show_all">More</a>
<ul class="menu">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
    <li>Item 6</li>
</ul>
<br />
<br />
<div class="more_menu"></div>

关于jquery - 有没有人见过会动态调整其大小的 jQuery 水平导航菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830734/

相关文章:

html - 为什么 100% 高度在显示器 :table-row on Chrome & FF but not in IE9? 内起作用

javascript - 没有得到使用 jquery 将 li 元素添加到 ul 的正确方法

html - 我怎样才能让我的 block 引​​用看起来像这样?

图像 src 属性中的 JavaScript "<SCRIPT>"

jquery - 创建 CSS :after with jQuery

jquery - 带垂直标题的 Kwicks slider

javascript - 模拟 jquery 或 javascript 中的 Enter 键

javascript - 正则表达式 HTML 或 PHP

javascript - Jquerymobile 设置动态创建列表的样式

php - 通过查询在 PHP 中删除 Access 数据库