我正在更新我的代码......大多数事情都解决了。一个问题仍然存在:
当我在元素(1 和 2)之间更快地移动鼠标时,工具提示不会显示。
我认为发生这种情况是因为我对元素鼠标离开有延迟:
$this.mouseleave(function (e) {
tooltip.timer = setTimeout(function () {
$("." + options.class).detach();
}, !options.mouse || options.static ? options.delay || 0 : 0);
}), // Mouse leave
当其中有链接时,我有它允许鼠标在工具提示上移动。
这个想法是在鼠标移过另一个元素时取消隐藏延迟。
该插件可以在http://jsfiddle.net/mdmoura/RPUX6/中测试
整个代码如下:
(function ($) {
$.fn.Tooltip = function (options) {
var defaults = {
class: 'Tooltip',
content: '',
delay: 120,
mouse: false,
offset: [0, -20],
static: true,
effect: function ($element, $tooltip) {
$tooltip.fadeIn(200);
}
};
options = $.extend({}, defaults, options);
$(this).each(function (e) {
var $this = $(this);
var tooltip = { timer: null, title: $this.attr('title') };
$this.mouseenter(function (e) {
var $tooltip =
$("<div>")
.attr("class", options.class)
.html(options.content !== '' ? (typeof options.content === 'string' ? options.content : options.content($this, $tooltip)) : tooltip.title)
.appendTo('body');
$this.attr('title', '');
var position = [0, 0];
if (options.mouse) {
position = [e.clientX + options.offset[0] + $(window).scrollLeft(), e.clientY + options.offset[1] + $(window).scrollTop()];
} else {
var coordinates = $this[0].getBoundingClientRect();
position = [
(function () {
if (options.offset[0] < 0)
return coordinates.left - Math.abs(options.offset[0]) - $tooltip.outerWidth() + $(window).scrollLeft();
else if (options.offset[0] === 0)
return coordinates.left - (($tooltip.outerWidth() - $this.outerWidth()) / 2) + $(window).scrollLeft();
else
return coordinates.left + $this.outerWidth() + options.offset[0] + $(window).scrollLeft();
})(),
(function () {
if (options.offset[1] < 0)
return coordinates.top - Math.abs(options.offset[1]) - $tooltip.outerHeight() + $(window).scrollTop();
else if (options.offset[1] === 0)
return coordinates.top - (($tooltip.outerHeight() - $this.outerHeight()) / 2) + $(window).scrollTop();
else
return coordinates.top + $this.outerHeight() + options.offset[1] + $(window).scrollTop();
})()
];
}
$tooltip.css({ left: position[0] + 'px', top: position[1] + 'px' });
options.effect($this, $tooltip.stop(true, true));
$tooltip.mouseenter(function () {
window.clearTimeout(tooltip.timer);
tooltip.timer = null;
}); // Tooltip enter
$tooltip.mouseleave(function () {
tooltip.timer = setTimeout(function () {
$tooltip.remove();
}, !options.mouse || options.static ? options.delay || 0 : 0);
});
}), // Mouse enter
$this.mouseleave(function (e) {
tooltip.timer = setTimeout(function () {
$("." + options.class).remove();
}, !options.mouse || options.static ? options.delay || 0 : 0);
}), // Mouse leave
$this.mousemove(function (e) {
if (options.mouse && !options.static) {
$("." + options.class).css({ left: e.clientX + options.offset[0] + $(window).scrollLeft() + 'px', top: e.clientY + options.offset[1] + $(window).scrollTop() + 'px' });
}
}); // Mouse move
}); // Each
}; // Tooltip
})(jQuery); // JQuery
我正在使用超时来允许鼠标在工具提示上移动。
有谁知道如何解决当前的问题?
谢谢你!