我正在使用“Suckerfish 之子”创建一个下拉菜单(实际上,它会在右侧弹出)导航菜单。
一些子菜单很长并且低于首屏。有没有办法(使用 JavaScript/jQuery)来确保菜单总是在首屏(如果菜单太大而无法放入视口,我很高兴)?
我正在使用“Suckerfish 之子”创建一个下拉菜单(实际上,它会在右侧弹出)导航菜单。
一些子菜单很长并且低于首屏。有没有办法(使用 JavaScript/jQuery)来确保菜单总是在首屏(如果菜单太大而无法放入视口,我很高兴)?
最后,我找不到答案,所以自己做了一个解决方案。
以下是我使用的代码(需要 jQuery):
var winHeight = $(window).height();
$navULs = $('#nav ul');
$navULs.find('ul').each(function(i,v) {
$this = $(v);
var ulHeight = $this.height();
var parentHeight = $this.closest('li').height();
var parentTop = $this.offset().top;
var parentBottom = parentTop + parentHeight;
if ((winHeight - parentTop) < ulHeight) {
if (parentBottom < ulHeight) {
$this.css({
'margin-top': '0px', // remove margin-top (added by suckerfish css) as it screws up the calculations
'top': '-' + (parentTop) + 'px' // move the menu up by the amount of px available above the parent's top
});
} else {
$this.css('bottom', '0px'); // v basic, if sub menu will drop too much shove it up (css does the heavy lifting here)
}
}
});
我试图在这篇博文中解释它。