我一直在做一个项目,我注意到引导程序的行为存在一些我想解决的不一致。
当弹出框(或工具提示,无论如何,它们基本上相同)接近屏幕边缘时 - 如果它是右侧的,当接近边缘时 - 它会收缩以免离开屏幕(它只适用在一定程度上,但这通常就足够了)。
当放置在左侧时,不会发生这种情况。
IE:
正确的位置:
正常宽度:
接近边缘:
左侧位置:
正常宽度:
接近边缘:
这些图像来自我为说明问题而编写的一个小型DEMO 。
我已经搞砸了源代码,到目前为止无济于事。我似乎无法确定到底是什么导致了这种行为。
有任何想法吗?
ps
我正在使用引导程序 3.1.1。新的 3.2 并没有解决这个问题(我现在想避免升级)。
重大更新!
经过一番挖掘,我发现这与引导程序无关 - 它是简单的 css - 似乎当你绝对定位一个元素并将其推到两侧时,它会尝试留在屏幕上。
我从来不知道这种行为,它会自动发生 - 但只会在你推动的方向 - 即从左侧推动的 div 在到达屏幕右边缘时会收缩,反之亦然。
碰巧的是,弹出框仅与left
分配一起定位——这就是为什么我们看到不一致的行为——当它被推到右边时它会收缩而不是另一个方向。
所以解决方案是改为分配right
- 听起来很简单?没那么多。我获取了源代码并对其进行了一些操作,添加了这些行(在 jsfiddle 中的第 250 行附近):
if (placement == 'left' && offset.left < 0) {
var right = ( $(window).width() + 10 ) - ( offset.left + actualWidth );
offset.left = 0;
$tip.offset(offset);
$tip.css({ 'right': right });
}
看起来很合理,对吧?如果向左的偏移量小于 0(即,它离开屏幕),则计算窗口宽度并从中删除左侧偏移量和弹出框 ( actualWidth
) 本身的宽度,然后得到与右侧的距离。
然后,确保重置左偏移并应用正确的定位。但是......它只能工作 - 也就是说它只能在第二次工作。
亲自检查一下!悬停一次,它放错了位置,把鼠标拉到一边再试一次,它突然就定位正确了。我勒个去?
编辑
好的,这似乎出现了很多,所以我会说清楚:
我知道auto
安置。我不想要它。我想控制弹出框的去向,让它自动决定不是问题的解决方案,它只是避免它