【发布时间】:2011-04-12 13:32:04
【问题描述】:
我正在尝试扩展 jQuery UI dialog() 以使用箭头指针指向所单击的内容。我遇到的问题是知道碰撞方法何时运行,以便我可以将指针从左侧更改为右侧。
是否可以知道 position.collision 方法何时触发?
$('#myElem').dialog({
position:{
collision:'flip'
}
});
解决方案:
事实证明,您可以通过的比文档中所说的要多。这是我最终使用的解决我的问题的方法:
position:
{
my: 'left top',
at: 'right center',
of: $trigger,
offset: '20 -55',
collision: 'flip',
using: function(obj) {
var $modal = $(this),
trigger_l = $trigger.position().left,
modal_l = obj.left,
top;
// Check IE's top position
top = ( isIE ) ? obj.top - 48 : top = obj.top;
$(this).css({
left: obj.left + 'px',
top: top + 'px'
});
}
}
我使用position 对象内的using 方法完成了大部分工作。然后我快速检查了它是否是 IE,在文档前面已经完成,并相应地设置了我的 CSS。
我前段时间就这样做了,所以如果您遇到问题,请告诉我。 :)
【问题讨论】:
-
听起来你需要一个工具提示插件而不是对话框插件。其中很多都会内置您正在谈论的箭头指针。然后您可以在其上多撒一点 css 并让它看起来工具提示内有一个对话框。
-
您从哪里得到可以将碰撞信息传递给对话框的想法?根据对话框文档,位置可以是字符串('center'、'left'、'right'、'top'、'bottom')或数组。 jqueryui.com/demos/dialog/#option-position
-
所以我实际尝试过,您也可以将对象传递给覆盖现有预设位置对象的位置。我能够使用它并将函数传递给参数以实现我的目标。
-
你是对的 - 它似乎是 jQuery UI 的未记录功能。我已经完成了创建在触发碰撞时会发出适当事件的插件的工作。
-
Seth:你能详细说明你是如何解决这个问题的吗?我和你有同样的问题。
标签: javascript jquery jquery-ui jquery-ui-dialog