Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有jQuery.stop()的无限循环_Jquery_Jquery Animate - Fatal编程技术网

带有jQuery.stop()的无限循环

带有jQuery.stop()的无限循环,jquery,jquery-animate,Jquery,Jquery Animate,我在玩弄jQuery的stop(),结果得到了一个无限循环。 其想法是(只是出于实验)创建一个带有“步长”条件的动画,该条件将检查元素的css属性是否达到某个值,在这种情况下,将动画停止在其轨迹上,清除队列并立即完成动画 我知道这听起来可能很傻,因为这可能不是.stop()的使用方式,但我想你可能会给我这个意外行为的答案 代码如下: $("#element").animate({ "width": "500px", "height": "130px" }, { "dura

我在玩弄jQuery的
stop()
,结果得到了一个无限循环。 其想法是(只是出于实验)创建一个带有“步长”条件的动画,该条件将检查元素的css属性是否达到某个值,在这种情况下,将动画停止在其轨迹上,清除队列并立即完成动画

我知道这听起来可能很傻,因为这可能不是
.stop()
的使用方式,但我想你可能会给我这个意外行为的答案

代码如下:

$("#element").animate({
    "width": "500px",
    "height": "130px"
}, {
    "duration": 850,
    "step": function () {
        var currentWidth = $(this).width();
        if(currentWidth >= 295) $(this).stop(true, true);
    }
}).slideUp(700);
我发现无限循环是由传递给
stop()
的第二个
true
引起的,也就是告诉动画立即完成的参数


它可能与“步进”功能有关,但有人能解释一下这种行为吗?

它可能是这样做的:

  • 运行动画帧
  • 运行步骤函数
  • 阶跃条件为真
  • 停止动画,但立即完成它
  • 运行最后一个动画帧以完成动画
  • 运行步骤功能(循环回步骤2)
  • 将动画帧设置为完成(从未到达)
  • 将动画设置为完成(从未达到)
  • 如果可以检查该步骤是否发生在最后一个动画帧中,则可以在调用stop()时将其考虑在内。

    调用:

    $(this).stop(true, true);
    

    将执行最后一步的
    步骤
    功能。在那次呼叫中,您再次呼叫停止。在
    步骤
    功能完成之前,不会从队列中删除动画。由于动画仍在队列中,再次调用
    stop
    将执行最后一步
    。。。持续不断。

    谢谢你,虽然我不完全理解你的答案,但让我们看看我是否明白要点:当我打电话时。停止(真,真)动画最后一次运行并执行“步骤”。。。在“步骤”中,再次调用stop并使动画最后一次再次运行。。。以此类推,一个无限循环被创建。。。对吗?另外,你能提供一些代码来说明如何正确地实现我的目标吗?非常感谢你。