Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 一个函数内另一个函数的停止超时_Javascript_Jquery - Fatal编程技术网

Javascript 一个函数内另一个函数的停止超时

Javascript 一个函数内另一个函数的停止超时,javascript,jquery,Javascript,Jquery,我想在单击第三个函数时停止前两个函数的自动运行。 现在,如果单击第三个按钮,警报将显示,但循环将继续。有什么方法可以做到这一点吗?您应该使用var timer=setTimeout(function()…);返回计时器,并将twotimer变量(其中包含一个标识超时计时器的数字)传递给第三个函数。然后,当调用第三个函数时,只需调用clearTimeout(timer) 查看此如果您存储了超时呼叫的ID,您可以随时清除它。 另一种方式 var timeout1; //... Define Fu

我想在单击第三个函数时停止前两个函数的自动运行。
现在,如果单击第三个按钮,警报将显示,但循环将继续。有什么方法可以做到这一点吗?

您应该使用
var timer=setTimeout(function()…);返回计时器,并将two
timer
变量(其中包含一个标识超时计时器的数字)传递给第三个函数。然后,当调用第三个函数时,只需调用
clearTimeout(timer)


查看此

如果您存储了超时呼叫的ID,您可以随时清除它。

  • 另一种方式

    var timeout1;
    //... Define Function name 
    function rotate() {
    timeout1 = setTimeout( rotate, 4000);
     }
    
    • 类似这样的东西:

      var rotateTimeout;
      rotateTimeout = window.setInterval(rotate,4000); 
      window.clearInterval(rotateTimeout);
      
      小解释: javascript中的超时和间隔都返回标识符,可用于事件取消

      function TimerController(){
          var ids = {};
          this.start = function(id, time, fn) {
              if (ids[id]) clearTimeout(ids[id]);
              ids[id] = setTimeout(function(){
                  fn();
                  delete ids[id];
              }, time);
          }
          this.stop = function(id) {
              clearTimeout(ids[id]);
              delete ids[id];
          }
          this.stopAll = function() {
              for (var id in ids) this.stop(id);
          }
      }
      
      var ctrlr = new TimerController();
      
      function One(){
          ctrlr.start('one', 3000, Two);
      }
      
      function Two(){
          ctrlr.start('two', 3000, One);
      }
      function Stop() {
          ctrlr.stopAll();
      }
      
      在上面的示例中,永远不会调用函数

      因此,如果我们想停止超时,就应该存储超时ID。
      上面的
      TimerController
      包含此逻辑

      var timeout1;
      //... Define Function name 
      function rotate() {
      timeout1 = setTimeout( rotate, 4000);
       }
      
      var rotateTimeout;
      rotateTimeout = window.setInterval(rotate,4000); 
      window.clearInterval(rotateTimeout);
      
      function TimerController(){
          var ids = {};
          this.start = function(id, time, fn) {
              if (ids[id]) clearTimeout(ids[id]);
              ids[id] = setTimeout(function(){
                  fn();
                  delete ids[id];
              }, time);
          }
          this.stop = function(id) {
              clearTimeout(ids[id]);
              delete ids[id];
          }
          this.stopAll = function() {
              for (var id in ids) this.stop(id);
          }
      }
      
      var ctrlr = new TimerController();
      
      function One(){
          ctrlr.start('one', 3000, Two);
      }
      
      function Two(){
          ctrlr.start('two', 3000, One);
      }
      function Stop() {
          ctrlr.stopAll();
      }
      
      var id = setTimeout(function(){console.log('Triggered!');}, 0); 
      clearTimeout(id);