【发布时间】:2012-04-30 01:56:16
【问题描述】:
我自己做了一个小工具提示,但是当我走得太快时似乎有问题。
这是一个简单的工具提示,即鼠标进入,它会显示一个在顶部淡入并带有一些文本的气泡,鼠标离开气泡会淡出。
当在几个不同的元素上非常快速地执行 mouseenter/mouseleave 时会出现此问题...首先它开始仅褪色到 0.6,然后最终不显示。
我猜这与排队有关。所以我尝试了 stop() 和 clearqueue() 但它仍然不起作用。
这是插件:
(function ($) {
$.fn.tooltip = function (options) {
var selector = $(this).selector;
var defaults = {
fadeInSpeed:350,
fadeOutSpeed:200,
delayIn: 350,
delayOut: 300,
popupId:'tooltip_popup',
verticalOffset: 30
};
var settings = $.extend({}, defaults, options);
$(document).delegate(selector, 'mouseenter', function (e) {
var $this = $(this);
var title = $this.attr('title');
$this.attr('title', '');
if (title !== '') {
if ($('#' + settings.popupId).text() === '') {
$('<div />').attr('id', settings.popupId)
.appendTo('body')
.css({
position:'absolute',
backgroudColor: 'black',
zIndex: 5
})
.addClass('tooltip_style')
.hide();
$('<div />').appendTo('#' + settings.popupId).addClass('tooltip_arrow');
$('<span />').appendTo('#' + settings.popupId);
} else {
$('#' + settings.popupId).hide().stop().clearQueue().hide();
}
var ele_x = $this.offset().left;
var ele_y = $this.offset().top;
$('#' + settings.popupId+' span').text(title);
$('#' + settings.popupId)
.css({
top : ele_y - settings.verticalOffset,
left: ele_x
})
.delay(settings.delayIn)
.fadeIn(settings.fadeInSpeed);
}
});
$(document).delegate(selector, 'mouseleave', function (e) {
var $this = $(this);
$('#' + settings.popupId)
.delay(settings.delayOut)
.fadeOut(settings.fadeOutSpeed);
$this.attr('title', $('#' + settings.popupId+' span').text() );
});
return this;
}
})(jQuery);
您可能会注意到,我认为这一行是我需要修复的:
$('#' + settings.popupId).hide().stop().clearQueue().hide();
(有点乱,因为我什么都试过了……哈哈)。
我觉得我不太了解排队这个东西。
这是一个小提琴:http://jsfiddle.net/denislexic/7YMcu/2/
感谢您的帮助。
【问题讨论】:
-
这里是 jsfiddle jsfiddle.net/denislexic/7YMcu/2 @RokoC.Buljan
标签: javascript jquery