Estou usando setInterval(fname, 10000);
para chamar uma função a cada 10 segundos em JavaScript. É possível parar de chamá-lo em algum evento?
Eu quero que o usuário possa parar a atualização repetida dos dados.
Estou usando setInterval(fname, 10000);
para chamar uma função a cada 10 segundos em JavaScript. É possível parar de chamá-lo em algum evento?
Eu quero que o usuário possa parar a atualização repetida dos dados.
setInterval()
retorna um ID de intervalo, para o qual você pode passar clearInterval()
:
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Veja os documentos para setInterval()
e clearInterval()
.
clearInterval
. Eu usei emwindow.refreshIntervalId
vez de uma variável local e funciona muito bem!$('foo').data('interval', setInterval(fn, 100));
e, em seguida, limpando-o comclearInterval($('foo').data('interval'));
certeza de que também existe uma maneira não-jQuery.Se você definir o valor de retorno
setInterval
para uma variável, poderá usáclearInterval
-lo para pará-lo.fonte
Você pode definir uma nova variável e aumentá-la em ++ (conte até uma) toda vez que for executada, então eu uso uma instrução condicional para finalizá-la:
Espero que ajude e esteja certo.
fonte
clearInterval(varName);
. Eu esperavaclearInterval
não funcionar quando passou o nome da função, pensei que exigisse o ID do intervalo. Suponho que isso só funcione se você tiver uma função nomeada, pois não pode passar uma função anônima como uma variável dentro dela.$(document).ready(function(){ });
é jQuery, é por isso que não funciona. Isso deveria ter sido mencionado pelo menos.varName
, que armazena uma função sem nome - wha ?? Você deve alterar ou derrubar esta resposta, IMHO.As respostas acima já explicaram como setInterval retorna um identificador e como esse identificador é usado para cancelar o timer de intervalo.
Algumas considerações arquitetônicas:
Por favor, não use variáveis "sem escopo". A maneira mais segura é usar o atributo de um objeto DOM. O lugar mais fácil seria "documento". Se a atualização for iniciada por um botão Iniciar / Parar, você poderá usar o próprio botão:
Como a função é definida dentro do manipulador de cliques do botão, você não precisa defini-la novamente. O temporizador pode ser retomado se o botão for clicado novamente.
fonte
document
que emwindow
?Já respondi ... Mas se você precisar de um timer reutilizável em destaque que também suporte várias tarefas em diferentes intervalos, poderá usar meu TaskTimer (para Nó e navegador).
No seu caso, quando os usuários clicam para interromper a atualização de dados; você também pode chamar
timer.pause()
, em seguida,timer.resume()
se eles precisam de re-ativar.Veja mais aqui .
fonte
O método clearInterval () pode ser usado para limpar um conjunto de cronômetros com o método setInterval ().
setInterval sempre retorna um valor de ID. Este valor pode ser passado em clearInterval () para parar o cronômetro. Aqui está um exemplo de timer começando de 30 e para quando ele se torna 0.
fonte
@cnu,
Você pode parar o intervalo, quando tenta executar o código antes de procurar no navegador do console (F12) ... tente comentar clearInterval (trigger) é procurar novamente um console, não um embelezador? : P
Veja exemplo uma fonte:
fonte
Declare a variável para atribuir valor retornado de setInterval (...) e passe a variável atribuída para clearInterval ();
por exemplo
// Em qualquer lugar que você tenha acesso ao timer declarado acima, chame clearInterval
fonte
Você também pode interromper o intervalo adicionando um ouvinte de evento, digamos um botão com o ID "stop-interval":
HTML:
Nota: O intervalo ainda será executado, mas nada acontecerá.
fonte
Foi assim que usei o método clearInterval () para parar o cronômetro após 10 segundos.
fonte
Use setTimeOut para interromper o intervalo após algum tempo.
fonte
Eu acho que o seguinte código ajudará:
Você fez o código 100% correto ... Então ... Qual é o problema? Ou é um tutorial ...
fonte
Por que não usar uma abordagem mais simples? Adicione uma turma!
Basta adicionar uma classe que diga ao intervalo para não fazer nada. Por exemplo: ao passar o mouse.
Eu tenho procurado por essa abordagem rápida e fácil há muito tempo, por isso estou publicando várias versões para apresentar o maior número possível de pessoas.
fonte
this.setInterval(function() { if(!$('#counter').hasClass('pauseInterval')) { //do something } }, 500);
é tudo que você tem para o código. Além disso, a verificação é a primeira coisa que você faz, por isso é muito leve quando está sendo pairada. É para isso que serve: pausar temporariamente uma função . Se você deseja finalizá-lo indefinidamente: é claro que você remove o intervalo.