Irvin Dominin 接受的答案在这方面对我有很大帮助。如果有人有与我相同的额外要求,我已经对其进行了扩展。
我还想延迟工具提示显示。因为“显示”选项设置为空,所以我需要复制它。(当鼠标从工具提示移回调用链接时,show 选项设置为 null 以停止明显重绘弹出窗口)。
我需要延迟,因为我正在开发的页面有很多用户工具提示,当鼠标在页面上移动时,即时显示有点不和谐。
我的解决方案是使用 open 事件隐藏工具提示并在再次显示之前添加超时。例外情况是如果相同的工具提示已经打开,并且为了对此进行排序,我在打开/关闭它时为每个元素添加了一个真/假数据属性(从 open 和 close 函数获取源元素并不容易,但是我认为是对的)。
免责声明:我不是 JQuery 的大师,可能有更简单的方法来复制它。我有时会被代码困在兔子洞里,所以下面的代码可能是个坏建议......
var ttWait; // global variable for tooltip delay
$(document).tooltip({
items: '.userSummaryLink',
show: null,
content: function() { // build the popup content
return $(this).prop('title');
},
open: function (event, ui) { // simulating the show option (that needs to be null to stop the popup closing and reopening when user mouses from popup back to source
var el = $(event.originalEvent.target);
if( !el.data('tooltip') ) { // only put open delay if SAME popup not already open
ui.tooltip.hide(); // stop popup opening immediately
ttWait = setTimeout(function() { // show popup after delay
el.data("tooltip", true); // acknowledge popup open
ui.tooltip.fadeIn("400");
}, 250);
}
},
close: function (event, ui) {
var el = $(event.originalEvent.target);
el.data("tooltip", false); // acknowledge popup closed (might be over-ridden below)
clearTimeout(ttWait); // stop tooltip delay function
ui.tooltip.hover(
function () {
$(this).stop(true).fadeTo(400, 1);
el.data("tooltip", true); // acknowledge popup still open
},
function () {
$(this).fadeOut("400", function () {
$(this).remove();
});
});
}
});
请注意,我还在弹出窗口中添加了一些类和定位,以便在调用链接上放置一个箭头。另外,我的内容来自页面上加载的用户对象文件。我已经删除了这些,希望它更易于使用。