JavaScript: пауза setTimeout (); - PullRequest
       34

JavaScript: пауза setTimeout ();

109 голосов
/ 19 октября 2010

Если у меня запущен активный тайм-аут, установленный через var t = setTimeout("dosomething()", 5000),

Есть ли способ приостановить и возобновить его?Есть ли способ получить время, оставшееся на текущем тайм-ауте?
или мне нужно в переменной, когда тайм-аут установлен, сохранить текущее время, затем мы сделаем паузу, чтобы получить разницу между сейчас и потом?

Ответы [ 14 ]

1 голос
/ 15 февраля 2011

Вы также можете реализовать его с помощью событий.

Вместо того, чтобы вычислять разницу во времени, вы начинаете и останавливаете прослушивание события 'tick', которое продолжается в фоновом режиме:

var Slideshow = {

  _create: function(){                  
    this.timer = window.setInterval(function(){
      $(window).trigger('timer:tick'); }, 8000);
  },

  play: function(){            
    $(window).bind('timer:tick', function(){
      // stuff
    });       
  },

  pause: function(){        
    $(window).unbind('timer:tick');
  }

};
1 голос
/ 19 октября 2010

Вы можете посмотреть clearTimeout ()

или сделать паузу в зависимости от глобальной переменной, которая устанавливается при достижении определенного условия.Как кнопка нажата.

  <button onclick="myBool = true" > pauseTimeout </button>

  <script>
  var myBool = false;

  var t = setTimeout(function() {if (!mybool) {dosomething()}}, 5000);
  </script>
0 голосов
/ 19 октября 2010

Если вам нужно скрыть несколько делений, вы можете использовать setInterval и несколько циклов, как в:

<div id="div1">1</div><div id="div2">2</div>
<div id="div3">3</div><div id="div4">4</div>
<script>
    function hideDiv(elm){
        var interval,
            unit = 1000,
            cycle = 5,
            hide = function(){
                interval = setInterval(function(){
                    if(--cycle === 0){
                        elm.style.display = 'none';
                        clearInterval(interval);
                    }
                    elm.setAttribute('data-cycle', cycle);
                    elm.innerHTML += '*';
                }, unit);
            };
        elm.onmouseover = function(){
            clearInterval(interval);
        };
        elm.onmouseout = function(){
            hide();
        };
        hide();
    }
    function hideDivs(ids){
        var id;
        while(id = ids.pop()){
            hideDiv(document.getElementById(id));
        }
    }
    hideDivs(['div1','div2','div3','div4']);
</script>
0 голосов
/ 19 октября 2010

Не думаю, что вы найдете что-нибудь лучше, чем clearTimeout .В любом случае вы всегда можете запланировать другое время ожидания, вместо этого «возобновив» его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...