代码之家  ›  专栏  ›  技术社区  ›  Alastair Pitts

$.slideToggle()&$.hover()动画队列问题

  •  2
  • Alastair Pitts  · 技术社区  · 14 年前

    我试图在jQuery中设置一个非常基本的悬停动画。将鼠标移到div上,主要内容向下滑动,鼠标向上滑动,内容向上滑动。

    <script type="text/javascript">
        $(function () {
            $('.listItem').hover(function () {
                $(this).find('.errorData').slideToggle('slow');
            });
        });</script>
    

    这段代码工作得很好,但明显的问题是,如果你很快地鼠标进出动画队列。

    为了缓解这种情况,我读到 .stop(true) 函数放在 .slideToggle() 停止上一个动画并清除动画队列。所以我尝试了这个代码:

    <script type="text/javascript">
        $(function () {
            $('.listItem').hover(function () {
                $(this).find('.errorData').stop(true).slideToggle('slow');
            });
        });</script>
    

    这似乎是加剧了你的速度移动鼠标进出。

    我好像搞不懂问题是什么,这个 JSFiddle

    编辑:我怀疑这是jQuery1.4.2中的一个错误,并提交了一份错误通知单: http://dev.jquery.com/ticket/6772

    3 回复  |  直到 14 年前
        1
  •  4
  •   Reigel Gallarde    14 年前

    尝试

    .stop(true,true)
    

    或者你可以用这个 hoverIntent plugin

        2
  •  1
  •   Devin Walker    12 年前
    .stop(true, true)
    

    像冠军一样工作:

      $('.subpage-block').hover(function(){
    
            $('.subpage-block-heading span', this).stop(true,true).fadeToggle('fast');
    
               $('.subpage-block-content', this).stop(true,true).slideToggle();
    
        });
    
        3
  •  0
  •   Iñaki Bedoya    12 年前

    也许更好?

    $('.listitem').hover(function(){
      if (!$(this).find('.errorData').hasClass('down') &&
          !$(this).find('.errorData').hasClass('up')) {
        $(this).find('.errorData').addClass('down').slideDown('fast', function() {
          $(this).removeClass('down');
        });
      }
    }, function() {
      if (!$(this).find('.errorData').hasClass('up')) {
        $(this).find('.errorData').addClass('up').slideUp('fast', function() {
          $(this).removeClass('up');
        });
      }
    });
    

    这样,队列最多为2个,一个在上升时,另一个在下降时。 第一个条件是我们不能呆在地上。