Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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
Javascript 从不同的函数onclick button2停止递归函数调用onclick button1_Javascript_Jquery_Scope - Fatal编程技术网

Javascript 从不同的函数onclick button2停止递归函数调用onclick button1

Javascript 从不同的函数onclick button2停止递归函数调用onclick button1,javascript,jquery,scope,Javascript,Jquery,Scope,我试图通过在单击“停止按钮”时调用不同的函数来确定如何停止来自单击“开始按钮”的递归函数调用 用户单击“开始按钮”,向下/向上滑动动画继续“无限”循环,直到 用户单击“停止按钮”,循环动画将停止 我想保留两个不同的按钮,而不是一个两用的启动/停止按钮。使用下面的代码,动画开始并循环,但单击“停止”按钮时不会停止。我想让停止按钮在单击时停止动画 您正在同步调用InfiniteLop,这意味着任何其他Javascript都无法执行,比如停止按钮的单击处理程序。您需要使调用异步,以便您的单击处理

我试图通过在单击“停止按钮”时调用不同的函数来确定如何停止来自单击“开始按钮”的递归函数调用

  • 用户单击“开始按钮”,向下/向上滑动动画继续“无限”循环,直到
  • 用户单击“停止按钮”,循环动画将停止
我想保留两个不同的按钮,而不是一个两用的启动/停止按钮。使用下面的代码,动画开始并循环,但单击“停止”按钮时不会停止。我想让停止按钮在单击时停止动画


您正在同步调用InfiniteLop,这意味着任何其他Javascript都无法执行,比如停止按钮的单击处理程序。您需要使调用异步,以便您的单击处理程序可以执行。您可以使用
setTimeout(infiniteLoop,0)
这样做,但您仍然无法获得所需的行为,因为在调用InfiniteLop之前,您仍然没有等待滑块向上滑动。因此,您应该将infiniteLoop作为回调传递给slideUp。这将使其异步并等待动画完成:

$('#top_message').slideUp(2000, infiniteLoop);

您的。

您正在同步调用InfiniteLop,这意味着任何其他Javascript都无法执行,比如停止按钮的单击处理程序。您需要使调用异步,以便您的单击处理程序可以执行。您可以使用
setTimeout(infiniteLoop,0)
这样做,但您仍然无法获得所需的行为,因为在调用InfiniteLop之前,您仍然没有等待滑块向上滑动。因此,您应该将infiniteLoop作为回调传递给slideUp。这将使其异步并等待动画完成:

$('#top_message').slideUp(2000, infiniteLoop);

您的。

问题可能是,当您想要停止动画时,仍有大量动画等待执行(因为您的代码运行速度比实际动画快得多)。通过提供
stop
函数的可选参数
clearQueue
,您可以删除所有等待的动画:

$('#top_message').stop(true)

问题可能是,当您想要停止动画时,仍有大量动画等待在队列中执行(因为代码的运行速度比实际动画快得多)。通过提供
stop
函数的可选参数
clearQueue
,您可以删除所有等待的动画:

$('#top_message').stop(true)

我会这样写:

$('#start_button').click( function() {
    if ( stopSliding ) return false;
    $('#top_message').hide().slideDown(2000, function() {
          $('#top_message').slideUp(2000, $('#start_button').click);
    });
    return false;
});

$('#stop_button').click( function() {
    stopSliding = true;
    $('#top_message').stop();
});

我会这样写:

$('#start_button').click( function() {
    if ( stopSliding ) return false;
    $('#top_message').hide().slideDown(2000, function() {
          $('#top_message').slideUp(2000, $('#start_button').click);
    });
    return false;
});

$('#stop_button').click( function() {
    stopSliding = true;
    $('#top_message').stop();
});

我刚刚将
stopSliding
变量重置为
flase
,这样,如果再次单击开始动画,它不会停止动画


我刚刚将
stopSliding
变量重置为
flase
,这样,如果再次单击开始动画,它不会停止动画


如果你先单击停止动画按钮,脚本将不起作用。我在帖子中修复了它。如果你先单击停止动画按钮,脚本将不起作用。我在帖子中修复了它。我实际上想知道在单击停止按钮后如何重新启用开始滑动按钮。它工作得很好!实际上,我想知道在单击停止按钮后如何重新启用开始滑动按钮。它工作得很好!在测试这段代码时,我注意到动画不会在点击按钮时无限地上下移动——它只运行一次。但是,通过这种方式,“停止”按钮可以更迅速地工作!在测试这段代码时,我注意到动画不会在点击按钮时无限地上下移动——它只运行一次。但是,通过这种方式,“停止”按钮可以更迅速地工作!