【问题标题】:positioning the popup menu with jquery based on element position in window根据窗口中的元素位置用jquery定位弹出菜单
【发布时间】:2012-11-15 13:39:45
【问题描述】:

我确信可能有人问过这个问题,但我找不到正确的解决方案..

我需要在鼠标悬停的图标上显示一个菜单,该图标可以放置在页面上的任何位置。示例代码在这里:(http://jsfiddle.net/Qfjdk/2/) 这显示了弹出窗口,但是如果我从

更改代码
#nav {
    margin:0; 
    padding:0; 
    list-style:none;
    float: left;
}   

#nav {
    margin:0; 
    padding:300px; 
    list-style:none;
    float: right;
}  

可以看出,菜单的位置总是在下方居中。我想根据图标的显示位置更改菜单的位置。

如果图标元素右对齐,我想将菜单定位在图标的右边缘。如果图标元素在显示页面的左下角,我希望左下角的菜单与左上角的元素等对齐。

我不是在寻找算法,我在寻找设置参数的正确方法.. 感谢您的帮助

【问题讨论】:

  • 我认为没有算法就无法做到。您可能会想出一个涵盖几种情况(左上 + 左下)的技巧,但您无法用简单的 css 涵盖所有情况。
  • 我会使用悬停功能。在显示菜单之前,使用 .offset() 检查图标的位置,并使用回调的 event.pageX / event.pageY 来选择菜单位置。然后用 .css() 修改菜单位置
  • @djjeck,我不是说不用算法就可以完成。我愿意提出这一点。我正在尝试获取正确的语法,以便我可以填写算法.. 如果您看到 javascript,有一个注释警报,我试图找出哪个元素给了我位置坐标,这就是我正在努力的地方跨度>

标签: javascript jquery css popup positioning


【解决方案1】:

我将首先定义您想要支持多少个选项(例如,4:右上角、右下角、左上角或左下角的按钮),并使用这些不同的选项创建一组类( .pos1、.pos2、.pos3、.pos4)。

然后我会使用 JS 或 jQuery 来计算图标相对于窗口的偏移量。根据该结果,我将为弹出窗口提供您之前创建的正确类。您可以在加载时执行此操作,也可以在调整窗口大小时执行此操作。例如,计算向右的距离并应用 css 更改(您可以改为应用一个类,但这只是为了说明它是如何工作的):

var callback = function () {

// when hover on an element, calculate offset to right

        $('.yourElement').mouseover(function(){ 
            var currentElement = $(this);
            var distanceRight = $(window).width() - ($(currentElement).offset().left + $(currentElement).width());

            // If the distance is less than 50, then do...          
            if (distanceRight < 50) {
                $('.yourPopup').css("left","-200px");
            }
            else {}
        });
    };

    $(document).ready(callback);
    $(window).resize(callback);

【讨论】:

  • 谢谢,我明白了。您的部分答案实际上是一个问题:“然后我会使用 JS 或 jQuery 来计算图标相对于窗口的偏移量。”你是怎么做到的?你能展示一个代码示例吗?
  • 我添加了一个例子,你必须做更多的组合,但我想你会明白的。您可以使用 .addClass 而不是 .css
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
相关资源
最近更新 更多