在调整菜单大小时将菜单项移动到溢出 div 中?

Moving menu items into overflow div as menu is resized?

我见过一些类似的问题,但答案似乎围绕着移动菜单和常规菜单之间的二进制切换,其中一些 JS 用于隐藏常规菜单(并显示移动菜单),只要有任何菜单项目溢出。

我要做的是从常规菜单中删除单个 LI 元素,并根据需要将它们移到溢出菜单中,

我会尝试说明;

初始菜单状态;

Home | About | Products | Services | Stuff | Contact

中间状态(window已调整大小,"contact"已移至溢出区域,“...”是溢出菜单,将包含所有隐藏项目.

Home | About | Products | Services | Stuff | ...

window进一步缩小,现在只有前2个菜单项能放得下,剩下的都在溢出区了

Home | About | ...

基本上,我只是想要一些方法来检测特定 LI 何时进入溢出区域,以便我可以相应地采取行动。我已经在使用 jQuery,所以我可以接受任何 jquery 解决方案。

所以我在这上面花了太多时间:-)
可以做到,但事实证明这很棘手。

一种方法是在 window 调整大小时循环浏览菜单,查看 li 顶部位置是否大于零。如果是这样,将其移至下一个菜单。

我的演示只将它们从第一个菜单移到第二个菜单。你需要想办法把它们移回去。

这是代码。抱歉,我无法获得完整的工作版本,但兄弟需要回去工作!
http://jsfiddle.net/rxs6q12d/3/

PS。 Whosebug 在链接到 jsfiddle 时需要一个代码片段。这与此无关 post 所以我就...

// include some code!

添加到乔的回答中:

http://jsfiddle.net/ha77c42h/1/

差不多我们重置了原来的设置,然后重新计算第二个菜单。这不会很好地扩展,但对于少量元素来说已经足够了。

具体添加:

var allArray   = new Array();
$('#menu1 li').each((index, elem) => {
    allArray.push($(elem));
})
$('#menu2 li').each((index, elem) => {
    allArray.push($(elem));
})
$(allArray).each((index, elem) => {
    $(elem).appendTo('#menu1');
})
$('#menu1 li').each(function(index, elem){
    var myposition = $(elem).position();
...