Подтвердить что ты не робот

Есть ли способ проверить, используется ли var с помощью setInterval()?

Например, я устанавливаю интервал, например

timer = setInterval(fncName, 1000);

и если я иду и делаю

clearInterval(timer);

он очищает интервал, но есть ли способ проверить, что он очистил интервал? Я попытался получить значение этого, пока у него есть интервал, а когда нет, но оба они кажутся цифрами.

4b9b3361

Ответ 1

Нет прямого способа сделать то, что вы ищете. Вместо этого вы можете установить timer на false каждый раз, когда вы вызываете clearInterval:

// Start timer
var timer = setInterval(fncName, 1000);

// End timer
clearInterval(timer);
timer = false;

Теперь timer будет либо ложным, либо иметь значение в заданное время, поэтому вы можете просто проверить с помощью

if (timer)
    ...

Если вы хотите инкапсулировать это в класс:

function Interval(fn, time) {
    var timer = false;
    this.start = function () {
        if (!this.isRunning())
            timer = setInterval(fn, time);
    };
    this.stop = function () {
        clearInterval(timer);
        timer = false;
    };
    this.isRunning = function () {
        return timer !== false;
    };
}

var i = new Interval(fncName, 1000);
i.start();

if (i.isRunning())
    // ...

i.stop();

Ответ 2

Возвращаемые значения из setTimeout и setInterval являются полностью непрозрачными значениями. Вы не можете получить от них никакого значения; единственное использование для них - вернуться к clearTimeout и clearInterval.

Нет функции для проверки того, соответствует ли значение активному таймауту/интервалу, извините! Если вам нужен таймер, чей статус вы могли бы проверить, вам нужно было бы создать свои собственные функции-обертки, которые запоминали, что такое состояние set/clear.

Ответ 3

ВЫ МОЖЕТЕ переопределить метод setInterval и добавить возможность отслеживать ваши интервалы. Ниже приведен пример неэстетичного описания идеи. Он будет работать только в текущем окне (если у вас есть несколько, вы можете изменить это с помощью объекта прототипа), и это будет работать только в том случае, если вы переопределите функции до того, как будут зарегистрированы любые функции, которые вы хотите отслеживать:

var oldSetInterval = window.setInterval;
var oldClearInterval = window.clearInterval;
window.setInterval = function(func, time)
{
  var id = oldSetInterval(func, time);
  window.intervals.push(id);
  return id;
}
window.intervals = [];
window.clearInterval = function(id)
{
  for(int i = 0; i < window.setInterval.intervals; ++i)
    if (window.setInterval.intervals[i] == id)
    {
      window.setInterval.intervals.splice(i, 1);
    }
  oldClearInterval(id);
}
window.isIntervalRegistered(id)
{
  for(int i = 0; i < window.setInterval.intervals; ++i)
    if (window.setInterval.intervals[i] == func)
      return true;
  return false;
}



var i = 0;
var refreshLoop = setInterval(function(){
    i++;
}, 250);

if (isIntervalRegistered(refrshLoop)) alert('still registered');
else alert('not registered');
clearInterval(refreshLoop);
if (isIntervalRegistered(refrshLoop)) alert('still registered');
else alert('not registered');

Ответ 4

Решение этой проблемы: создайте глобальный счетчик, который увеличивается в вашем коде, выполняемом setInterval. Затем, прежде чем вы вспомните setInterval, проверьте, увеличивается ли счетчик STILL. Если это так, ваш setInterval все еще активен. Если нет, вам хорошо идти.

Ответ 5

Я сделал это, как показано ниже. Моя проблема решена. вы должны установить значение как "false", когда вы очищаете тайм-аут таймера.

var timeer=false;
----
----
if(timeer==false)
{
  starttimer();  
}
-----
-----
function starttimer()
{
  timeer=setInterval(activefunction, 1000); 
}

function pausetimer()
{
  clearTimeout(timeer);
  timeer=false;
}

Ответ 6

Множество сложных ответов выше, этот метод отлично подходит для меня:

if (typeof timer == 'undefined')
{
    //timer has been cleared
}