JavaScript 下拉菜单小部件

3
我有一个由<ul>组成的菜单,是在Web CMS中实现的。我希望有几个菜单项拥有子项,并以下拉列表的方式显示。这些子项也是<ul>元素。
通常只需要使用几行CSS和Javascript代码即可完成此操作,但我正在寻找一个现成的Javascript解决方案,以帮助我处理以下问题:
- 解决屏幕边缘情况:如果任何部分的下拉菜单会超出当前视口,将其放置在完全位于视口内。 - 这对于从头开始编写代码而言很麻烦。
如果还能做到以下功能就更好了:
- 在下拉按钮下方集中定位。 - 为页面添加onclick事件,以便在单击下拉菜单外部时关闭它;然后干净地删除onclick事件。 但如果必要的话,我自己也可以实现这些功能。
希望有一个美观、小巧、不显眼的小部件,可以神奇地将我的<ul>转换成下拉菜单。
如果解决方案基于框架,则必须使用Prototype,因为这是我在CMS中使用的框架。
1个回答

3
您可以获取UL的偏移量,并检查它们是否在视口的某个距离范围内。
// Pseudo code
var ul = document.getElementById("menu");
if(ul.offset.x + ul.width > viewport.width) {
    ul.offset.x = viewport.width - ul.width;
}

您可以获取下拉按钮点击的确切位置,然后应用基本数学知识将菜单定位在其下方。


是的,这是正确的方法。然而,我从以往的经验中知道,将其正确实现(考虑滚动容器、绝对/相对定位等)以及在所有浏览器中使其正常工作会花费大量时间。我希望能够避免这个问题 :) - Pekka
在这种情况下,一个库确实会有所帮助,不幸的是我不能为你提供这些帮助,因为我倾向于使用自己的库。 - user215361

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接