这是一个相当容易的,但我似乎无法弄明白。
基本上我有一个jquery悬停,在div中淡入淡出并在悬停时淡出另一个。
当我快速盘旋几次时,它会来回脉冲约3-4秒,以完成所有淡入/淡出。
我通常使用.stop()停止这些事情,但它似乎没有在这里做的伎俩。如果我在a` $(“。txtWrap”)之前将鼠标悬停在按钮上,我怎么能杀死淡入淡出。停止()。悬停(
$(".txtWrap").stop().hover(
function () {
$(this).find('.txtBock').fadeOut();
$(this).find('.txtDesc').fadeIn();
},
function () {
$(this).find('.txtBock').fadeIn();
$(this).find('.txtDesc').fadeOut();
}
)
答案 0 :(得分:27)
stop()
错位。
试试这个:
$(".txtWrap").hover(
function () {
$(this).find('.txtBock').stop().fadeOut();
$(this).find('.txtDesc').fadeIn();
// $('#timeTxt').fadeOut();
// $('#timeTxtDesc').fadeIn();
},
function () {
$(this).find('.txtBock').fadeIn();
$(this).find('.txtDesc').stop().fadeOut();
}
)
修改强>
这将动画元素的不透明度而不隐藏元素。如果您希望隐藏它们,请使用.hide()
,您需要为animate函数添加回调。
$(".txtWrap").hover(
function () {
$(this).find('.txtBock').stop().animate({opacity:0}, 500);
$(this).find('.txtDesc').animate({opacity:1}, 500);
// $('#timeTxt').fadeOut();
// $('#timeTxtDesc').fadeIn();
},
function () {
$(this).find('.txtBock').animate({opacity:1}, 500);
$(this).find('.txtDesc').stop().animate({opacity:0}, 500);
}
)
答案 1 :(得分:18)
以为我会发布这个,因为这些答案都不适合我。
*真正的参数告诉停止清除队列并转到动画的结尾
$(".txtWrap").stop().hover(
function () {
$(this).find('.txtBock').stop(true, true).fadeOut();
$(this).find('.txtDesc').fadeIn();
},
function () {
$(this).find('.txtBock').fadeIn();
$(this).find('.txtDesc').stop(true, true).fadeOut();
}
)
链接:http://forum.jquery.com/topic/jquery-hover-events-cant-keep-up-with-fadein-and-fadeout-events-queue
答案 2 :(得分:8)
在这样的时候,我转向Brian Cherne的天才.hoverIntent()
plugin - 它非常流畅......等到用户在执行之前已经放慢速度。您可以根据需要进行配置。
只需添加插件(它足够短我有时会将其直接放入我的脚本文件中)然后添加单词Intent
:
$(".txtWrap").hoverIntent(
function () {
$(this).find('.txtBock').fadeOut();
$(this).find('.txtDesc').fadeIn();
},
function () {
$(this).find('.txtBock').fadeIn();
$(this).find('.txtDesc').fadeOut();
}
)
答案 3 :(得分:1)
当超级智能SO搜索引擎为我突出显示这个问题时,我即将发布一个类似的问题,所以我想我会为后代发布我自己的解决方案。
我采用了user113716的解决方案,并将其充实了一点。在我的情况下,我隐藏并显示的div开始为display:none
,因此我必须将opacity:0
添加到CSS并告诉jQuery在开始动画不透明度之前设置.css({display:block})
到1
淡入。
在淡出时,我不需要那个,但是在将不透明度设置为零后,我确实添加了对.hide()
div的回调。
这是一个小提琴,说明我最终得到的结果:
http://jsfiddle.net/mblase75/wx2MJ/
相关的JavaScript:
$('li').mouseover(function() {
$(this).addClass('hover');
$('#' + $(this).data('divid')).stop().css({
display: 'block'
}).animate({
opacity: 1
}, 500);
});
$('li').mouseout(function() {
$(this).removeClass('hover');
$('#' + $(this).data('divid')).stop().animate({
opacity: 0
}, 500, function() {
$(this).hide();
});
});
答案 4 :(得分:1)
如果你有这个东西:
$("#frase1").fadeIn(5000, function(){
$("#frase2").fadeIn(10000, function(){
$("#frase3").fadeIn(15000, function(){
});
});
});
好的,您必须使用此指令重置队列中的fadeIn或其他事件:
$("#frase1").stop(false,true, true);
$("#frase2").stop(false,true, true);
$("#frase3").stop(false,true, true);