用于弹出窗口的JavaScript / Jquery碰撞检测

时间:2013-09-08 12:46:30

标签: javascript jquery html5 jquery-ui css3

我正在编写一个应该在iPad和桌面浏览器上运行的网络应用程序。

我有一个带有弹出窗口的过滤器部分(弹出窗口相对于过滤器<li>标签绝对定位):

enter image description here

在桌面上看起来很漂亮和花花公子,但在横向模式的Ipad上,弹出窗口的底部会因为超出视口而被剪切。

我尝试使用queryUI position解决问题:

$('.capbIpadPopupAutoComplete').position({
    "my": "left center" ,      //  Horizontal then vertical, missing values default to center
    "at": "left top",     //  Horizontal then vertical, missing values default to center
    "of": $(this).closest('li'),     //  Element to position against 
    // "offset": "20 30" ,      //  Pixel values for offset, Horizontal then vertical, negative values OK
    "collision": "fit flip" //  What to do in case of 
});

但只有在弹出窗口与屏幕左侧而不是底部碰撞时才有效。

我还需要确保三角形相应移动,因为它应始终指向正确的滤镜。

我使用JqueryUI位置错了吗?有更好的解决方案吗?

Here is a very simplified fiddle

1 个答案:

答案 0 :(得分:2)

好的,看起来最大的问题是"flip fit"实际上并不是collision的有效值。 (我认为它被视为"flip"。)你可能正在寻找"flipfit"(没有空格),或者只是"fit"。您还应确保将弹出窗口的右侧侧与li的左侧对齐 - 左侧对齐使左侧重叠,然后将其翻转,因为没有'足够的空间。我调整了你的代码,让它工作得更好(但仍然不完美;你必须调整它)。

$('.capbIpadPopupAutoComplete').position({
    "my": "right top" ,      //  Horizontal then vertical, missing values default to center
    "at": "left top",     //  Horizontal then vertical, missing values default to center
    "of": $('.capbStrategicPlan'),     //  Element to position against 
    // "offset": "20 30" ,      //  Pixel values for offset, Horizontal then vertical, negative values OK
    "collision": "fit" //  What to do in case of 
});

$(this)似乎没有在of参数中工作,所以我替换了它。

您还需要设置弹出窗口的right值,因为.position设置了left,设置两者都会弹出弹出窗口。

至于箭头,为什么不单独定位它们?如果弹出窗口必须移动一点,它会与箭头重叠一些,但这只会使箭头看起来更小。