我正在尝试做一个动画信息语音泡泡(我在这里发现了泡泡的css:http://nicolasgallagher.com/pure-css-speech-bubbles/),每次我的鼠标都在一个链接上我正在创建一个div infoBubble和当鼠标是这个div我正在使用.remove()删除它。但是当我快速移动鼠标从链接到另一个链接时,.remove()似乎不适用于第一个buuble。
我的jQuery代码是:
infoBubble = function(el){
setTimeout(function() {
$('body').append('<div class="infoBubble"></div>');
var bubble = $('.infoBubble:last');
var posTop = el.offset().top-el.height()-12;
var posLeft = el.offset().left+el.width()/2-bubble.width()/2;
bubble.css({ 'left':posLeft, 'top':posTop-10, 'background-color': 'rgba(0, 0, 0, 0.7)', 'opacity':1 });
bubble.html('eeeeeeeeee');
bubble.stop().animate({ 'top':posTop },200);
},400);
}
infoBubbleStop = function(){
var bubble = $('.infoBubble:last');
bubble.stop().animate({ 'opacity':0 }, 200, 'linear', function(){ bubble.remove(); });
}
$(document).on('mouseover', 'a', function () {
infoBubble($(this));
}).on('mouseout', function() {
infoBubbleStop();
});
这里有一个小提琴:http://jsfiddle.net/malamine_kebe/YmKT4/
非常感谢帮助...
答案 0 :(得分:2)
问题是超时,尝试稍微修改一下你的逻辑,例如:
infoBubble = function (el) {
$('body').append('<div class="infoBubble"></div>');
var bubble = $('.infoBubble:last');
var posTop = el.offset().top - el.height() - 12;
var posLeft = el.offset().left + el.width() / 2 - bubble.width() / 2;
bubble.hide().css({
'left': posLeft,
'top': posTop - 10,
'background-color': 'rgba(0, 0, 0, 0)',
'opacity': 1
});
setTimeout(function () {
bubble.show().html('eeeeeeeeee');
bubble.animate({
'top': posTop,
'background-color': 'rgba(0, 0, 0, 0.7)'
}, 200);
}, 400);
}
答案 1 :(得分:0)
使用jQuery.stop()函数的jumpToEnd
参数,即使停止动画,也应该能够运行完整的功能。
现在的问题是,您没有选择正确的bubble
,而是使用:last
,因此它将始终是您刚创建的那个。
您应该为鼠标悬停所需的每个链接添加气泡:
http://jsfiddle.net/pboissonneault/YmKT4/4/
infoBubble = function(el){
setTimeout(function(el) {
el.append('<div class="infoBubble"></div>');
var bubble = $('.infoBubble:last', el);
var posTop = el.offset().top-el.height()-12;
var posLeft = el.offset().left+el.width()/2-bubble.width()/2;
bubble.css({ 'left':posLeft, 'top':posTop-10, 'background-color': 'rgba(0, 0, 0, 0)', 'opacity':1 });
bubble.html('eeeeeeeeee');
bubble.stop().animate({ 'top':posTop, 'background-color': 'rgba(0, 0, 0, 0.7)' },200);
}(el),400);
}
infoBubbleStop = function(el){
var bubble = $('.infoBubble:last', el);
bubble.stop(true, true).animate({ 'opacity':0 }, 200, 'linear', function(){ bubble.remove(); });
}
$(document).on('mouseover', 'a', function () {
infoBubble($(this));
}).on('mouseout', function() {
infoBubbleStop($(this));
});
答案 2 :(得分:0)
在下面的代码行中将400更改为4:
infoBubble = function(el){
setTimeout(function() {
$('body').append('<div class="infoBubble"></div>');
var bubble = $('.infoBubble:last');
var posTop = el.offset().top-el.height()-12;
var posLeft = el.offset().left+el.width()/2-bubble.width()/2;
bubble.css({ 'left':posLeft, 'top':posTop-10, 'background-color'rgba(0, 0, 0, 0)', 'opacity':1 });
bubble.html('eeeeeeeeee');
bubble.stop().animate({ 'top':posTop, 'background-color': 'rgba(0, 0, 0, 0.7)' },200);
},4);
}
infoBubbleStop = function(){
var bubble = $('.infoBubble:last');
bubble.stop().animate({ 'opacity':0 }, 5, 'linear', function(){ bubble.remove(); });
}
$(document).on('mouseover', 'a', function () {
infoBubble($(this));
}).on('mouseout', function() {
infoBubbleStop();
});