Eu escrevi uma função javascript que usa setInterval para manipular uma string a cada décimo de segundo para um determinado número de iterações.
function timer() {
var section = document.getElementById('txt').value;
var len = section.length;
var rands = new Array();
for (i=0; i<len; i++) {
rands.push(Math.floor(Math.random()*len));
};
var counter = 0
var interval = setInterval(function() {
var letters = section.split('');
for (j=0; j < len; j++) {
if (counter < rands[j]) {
letters[j] = Math.floor(Math.random()*9);
};
};
document.getElementById('txt').value = letters.join('');
counter++
if (counter > rands.max()) {
clearInterval(interval);
}
}, 100);
};
Em vez de definir o intervalo em um número específico, eu gostaria de atualizá-lo sempre que executado, com base em um contador. Então, em vez de:
var interval = setInterval(function() { ... }, 100);
Seria algo como:
var interval = setInterval(function() { ... }, 10*counter);
Infelizmente, isso não funcionou. Parecia que "10 * contador" é igual a 0.
Então, como posso ajustar o intervalo toda vez que a função anônima é executada?
javascript
timer
setinterval
Joe Di Stefano
fonte
fonte
--t
provavelmente deve sert--
jsfiddle.net/albertjan/by5fdtimes
for muito grande?t
paratick
, que foi o meu melhor palpite sobre o que "t" deve representar.t
é um nome de variável bastante ruim.Você pode usar uma função anônima:
ATUALIZAÇÃO: Conforme sugerido por A. Wolff, use
setTimeout
para evitar a necessidadeclearInterval
.fonte
Eu gosto desta pergunta - inspirou um pequeno objeto temporizador em mim:
Exemplo de uso
fonte
Eu tinha a mesma pergunta que o pôster original, fiz isso como uma solução. Não tenho certeza de quão eficiente isso é ....
fonte
setInterval
está errada @RozzA - ainda está sujeita aos mesmos atrasos que qualquer outro JavaScript, e quase todos os navegadores também definem setInterval como 4ms. Você tem um link para um post sobre isso ou algo assim?Esta é a minha maneira de fazer isso, eu uso setTimeout:
Uso:
fonte
set_interval
função para não lançar uma nova execução a menos que o novo intervalo é menor do que o antigo ..if (iv < this.iv) { clearInterval(this.timeout); this.start(false, iv); } else { this.iv = iv; }
Uma maneira muito mais simples seria ter uma
if
declaração na função atualizada e um controle para executar seu comando em intervalos de tempo regulares. No exemplo a seguir, eu executo um alerta a cada 2 segundos e o intervalo (intrv
) pode ser alterado dinamicamente ...fonte
Isso pode ser iniciado da maneira que você desejar. timeout é o método que eu usei para mantê-lo no topo da hora.
Eu precisava de cada hora para iniciar um bloco de código a cada hora. Portanto, isso iniciaria na inicialização do servidor e executaria o intervalo a cada hora. Basicamente, a execução inicial é iniciar o intervalo dentro do mesmo minuto. Assim, em um segundo a partir do init, execute imediatamente a cada 5 segundos.
Como alternativa, se você quiser que algo aconteça no início e sempre para um intervalo específico, você pode chamá-lo ao mesmo tempo que o setInterval. Por exemplo:
Aqui temos essa execução pela primeira vez e depois a cada hora.
fonte
Resposta simples é que você não pode atualizar um intervalo do cronômetro já criado . (Existem apenas duas funções
setInterval/setTimer
eclearInterval/clearTimer
, portanto, ter umtimerId
só pode ser desativado.) Mas você pode fazer algumas soluções alternativas. Dê uma olhada neste repositório do github .fonte
Também não consegui sincronizar e alterar a velocidade dos meus setIntervals e estava prestes a postar uma pergunta. Mas acho que encontrei um caminho. Certamente deve ser melhorado porque sou iniciante. Então, eu ficaria feliz em ler seus comentários / observações sobre isso.
Se você quiser que os contadores comecem a aumentar assim que a página for carregada, coloque
counter1()
ecounter2()
emfoo()
antescountingSpeed
é chamado. Caso contrário, levaspeed
milissegundos antes da execução. EDIT: resposta mais curta.fonte
não pode ficar mais curto
fonte
Sou iniciante em javascript e não encontrei nenhuma ajuda nas respostas anteriores (mas com muitas boas idéias).
Este trecho de código abaixo acelera (aceleração> 1) ou desacelera (aceleração <1). Espero que ajude algumas pessoas:
Com:
timer
: o valor inicial setInterval em ms (aumentando ou diminuindo)refresh
: o tempo antes de um novo valor detimer
ser calculado. Este é o passo da extensãofactor
: a diferença entre o valor antigo e o próximotimer
valor. Esta é a altura do degraufonte
Faça nova função:
fonte
Aqui está mais uma maneira de criar um temporizador de intervalo de desaceleração / aceleração. O intervalo é multiplicado por um fator até que o tempo total seja excedido.
fonte
fonte
Uncaught TypeError: interval is not a function
mas isso funcionou: jsfiddle.net/fgs5nwgnInspirado no retorno de chamada interno acima, criei uma função para disparar um retorno de chamada em frações de minutos. Se o tempo limite for definido para intervalos como 6.000, 15.000, 30.000, 60.000, ele adaptará continuamente os intervalos em sincronia à transição exata para o próximo minuto do relógio do sistema.
fonte