javascript - 检测 Web 下拉菜单是否要显示在屏幕外

标签 javascript jquery html css menu

我有一个基于 CSS 的简单多级下拉菜单。第二级或第三级可能会超出可见窗口,具有特定的分辨率和窗口大小组合。

一些预建的菜单控件如果检测到这种情况,只会向左而不是向右打开下拉菜单。

我该如何测试(使用 JS/jQuery)这种情况?

最佳答案

您可以使用以下函数测试菜单项是否在屏幕外:

/*---   function bIsNodeClippedOrOffscreen returns true if a node
        is offscreen (without scrolling).
        Requires jQuery.
*/
function bIsNodeClippedOrOffscreen (zJnode)
{
    var aDivPos             = zJnode.offset ();
    var iLeftPos            = aDivPos.left;
    var iTopPos             = aDivPos.top;

    var iDivWidth           = zJnode.outerWidth  (true);
    var iDivHeight          = zJnode.outerHeight (true);

    var bOffScreen          = CheckIfPointIsOffScreen (iLeftPos, iTopPos);
    var bClipped            = CheckIfPointIsOffScreen (iLeftPos + iDivWidth, iTopPos + iDivHeight);

    return (bOffScreen || bClipped);
}


function CheckIfPointIsOffScreen (iLeftPos, iTopPos)
{
    var iBrowserWidth       = $(window).width()  - 16;   //-- 16 is fudge for scrollbars, refine later
    var iBrowserHeight      = $(window).height() - 16;   //-- 16 is fudge for scrollbars, refine later
    var bOffScreen          = false;

    if (iLeftPos < 0  ||  iLeftPos >= iBrowserWidth)
        bOffScreen          = true;

    if (iTopPos < 0   ||  iTopPos >= iBrowserHeight)
        bOffScreen          = true;

    return bOffScreen;
}

.
示例用法:

<li id="SomeMenuItem"> Get your shopping cart for free!
...
...

var Node            = $("#SomeMenuItem");

var NeedToMoveIt    = bIsNodeClippedOrOffscreen (Node);

关于javascript - 检测 Web 下拉菜单是否要显示在屏幕外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3087122/

相关文章:

javascript - 定向附加图像标签

javascript - 单击其中的按钮后如何淡出div?

java - Jquery + PHP : Grabbing the autocomplete strings from a third party php script

javascript - 灯箱展示大图

html - 推荐的 HTML 格式化程序脚本/实用程序?

javascript - 鼠标选择时突出显示 Pdf 文件中的文本

javascript - 使用 Babel.js 将 ES6 箭头函数编译为 Es5

javascript - 如何在 Javascript 中使用 NumberFormat?

php - 从 Facebook 中提取最新图片

jquery - IE8 上的自定义工具提示标题