0

我创建了一个摆动动画函数,但是在某个时候我想销毁堆栈中的绑定动画,但是当我这样做时,我收到一个错误:

Uncaught RangeError: Maximum call stack size exceeded

这显然是因为我正在填满整个堆栈,但是我想知道是否有更好的方法来执行以下动画,但仍然可以在我想要的时候创建一种平滑的方式来停止它?

function wobble(targetElement, speed, distance) {
    targetElement.animate({ marginLeft: "+=" + distance}, {
        complete: function () {             
            targetElement.animate({ marginLeft: "-=" + distance}, {
                complete: function () {
                    wobble(targetElement, speed, distance, status);
                }
            });
        }
    });
}

finish()用来杀死队列并停止动画,这就是我得到这个错误的原因。

4

1 回答 1

0

我还没有测试过代码,但你可以尝试这样的事情:

    var count=0;
    function wobble(targetElement, speed, distance,count) {
        if (count < 50){
            targetElement.animate({ marginLeft: "+=" + distance}, {
                 complete: wobble (targetElement, speed, distance,count++);
             }
        }
   });

第二种解决方案(不测试代码)

var continue=true;
function wobble(targetElement, speed, distance) {
    if (continue){
        targetElement.animate({ marginLeft: "+=" + distance}, {
            complete: wobble (targetElement, speed, distance);
        });
    }
};

//当你想完成“摆动”时,只需将“继续”变量设置为 false,例如

$('button.stop').on('click',function(){
      console.log("wobbling stopped");
      continue=false;
});

所以重点是你需要一些东西(一个标志),它告诉“摆动”方法停止。在这种情况下,标志将是“继续”变量,它会在您需要时从“真”变为“假”。

于 2013-08-29T07:27:53.903 回答