【问题标题】:Animate not queueing correctly动画未正确排队
【发布时间】:2014-07-17 01:51:11
【问题描述】:

如果您将鼠标悬停在标题上,我有这个工作代码可以前后移动标题图标

jQuery('h1.heading').hover(
  function(){ 
    $icon = jQuery('.heading-icon', this);    
    if( ! $icon.is(':animated') ){
        $icon.animate({ "margin-left" : "+=7px" }, 200, function(){
          $icon.animate({ "margin-left" : "-=7px" }, 400, function(){ 
             $icon.css('margin-left','auto'); 
          } );
        } );
    }      
  },
  function(){} 
);

但是,如果您将鼠标悬停在标题上的速度更快(比动画完成的速度更快),它会出现错误并最终从原始位置移开。

我使用 onComplete 函数,我什至尝试使用! $('...').is(':animated'),如您在上面看到的,没有帮助,所以我想至少我会在动画结束后重置位置,这样即使它会出现错误,它也会在在所有动画结束后至少重置到原始位置......这只是部分工作并且仍然会出现错误并最终处于错误的位置......

那怎么了?

为什么会这样? jQuery UI enques 的抖动效果好吗?

注意:我不在乎动画是否运行了几次,目标是在(所有)动画结束时使其保持在正确的位置。

有什么帮助吗? :)

编辑

我终于在 JSFiddle 上重现了这个问题 - http://jsfiddle.net/yhJst/
==> 尝试在标题上更快地上下悬停

编辑2

只有一个标题时似乎不会发生...http://jsfiddle.net/scZcB/3/

【问题讨论】:

  • 不使用hover 和一个空函数,为什么不使用mouseenter
  • adivise = 使用 html5/css3 动画而不是 javascript!
  • 我无法重现问题我不明白...jsfiddle.net/scZcB/1
  • @Eirenaios 不能使用 css3,疯狂的跨浏览器 ;)
  • @Karl-AndréGagnon mouseenter 解决问题了吗?我不这么认为...

标签: javascript jquery css animation jquery-animate


【解决方案1】:

这就是问题所在,在您的回调函数中,您在 $icon 变量上使用了动画。但是,当您悬停另一个元素时,该变量会针对新悬停的元素进行更改。

在回调或自然队列中使用$(this)

自然排队

jQuery('h1.sc_blogger_title').on('mouseenter', function(){ 
    $icon = jQuery('.sc_title_bubble_icon', this);    
    if( ! $icon.is(':animated') ){
        $icon.animate({ "margin-left" : "+=7px" }, 200).animate({ "margin-left" : "-=7px" }, 400);
    }      
});

http://jsfiddle.net/yhJst/1/

$(this)

jQuery('h1.sc_blogger_title').on('mouseenter', function(){ 
    $icon = jQuery('.sc_title_bubble_icon', this);    
    if( ! $icon.is(':animated') ){
        $icon.animate({ "margin-left" : "+=7px" }, 200, function(){
            $(this).animate({ "margin-left" : "-=7px" }, 400);
        });
    }      
});

http://jsfiddle.net/yhJst/2/


或者使用局部变量。

正如您所发现的,当前变量是一个全局变量。只需添加关键字var

jQuery('h1.sc_blogger_title').on('mouseenter', function(){ 
    var $icon = jQuery('.sc_title_bubble_icon', this);    
    if( ! $icon.is(':animated') ){
        $icon.animate({ "margin-left" : "+=7px" }, 200, function(){
            $icon.animate({ "margin-left" : "-=7px" }, 400, function(){ 
                $icon.css('margin-left','auto'); 
            } );
        } );
    }      
});

【讨论】:

  • 或者,只使用我的,但使用 var 关键字:D var $icon = ...;
  • @jave.web 哦...我的...上帝...我完全错过了!我在看你的代码,发现了问题,但不知道为什么。说服自己这没关系,因为您可以使用上面的代码修复它。 我从来没有意识到它是一个全局变量!真丢人。
  • 好吧,我明白我忘记了你的答案是一个全局变量:D,无论如何我使用了你的代码,它只是更短:)(但我的也可以使用 var 关键字:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多