Jquery停止Fadein / Fadeout

时间:2010-05-10 19:46:27

标签: javascript jquery hover

这是一个相当容易的,但我似乎无法弄明白。

基本上我有一个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();
  }
)

5 个答案:

答案 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);