Napisałem funkcję javascript, która używa setInterval do manipulowania łańcuchem znaków co dziesiątą część sekundy przez określoną liczbę iteracji.
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);
};
Zamiast ustawiać interwał na określoną liczbę, chciałbym aktualizować go za każdym razem, gdy jest uruchomiony, na podstawie licznika. Więc zamiast:
var interval = setInterval(function() { ... }, 100);
To byłoby coś takiego:
var interval = setInterval(function() { ... }, 10*counter);
Niestety to nie zadziałało. Wyglądało na to, że „10 * licznik” równa się 0.
Jak więc mogę dostosować interwał przy każdym uruchomieniu funkcji anonimowej?
źródło
--t
prawdopodobnie powinno byćt--
jsfiddle.net/albertjan/by5fdtimes
jest zbyt duży?t
totick
, co było moim najlepszym przypuszczeniem, co ma oznaczać „t”.t
to całkiem zła nazwa zmiennej.Możesz użyć anonimowej funkcji:
AKTUALIZACJA: zgodnie z sugestią A. Wolffa, użyj,
setTimeout
aby uniknąć potrzebyclearInterval
.źródło
Podoba mi się to pytanie - zainspirowało mnie mały obiekt z zegarem:
Przykładowe zastosowanie
źródło
Miałem to samo pytanie co oryginalny plakat, zrobiłem to jako rozwiązanie. Nie jestem pewien, jak wydajne jest to ....
źródło
setInterval
jest błędne @RozzA - nadal podlega takim samym opóźnieniom, jak każdy inny JavaScript, a prawie każda przeglądarka również ustawia interwał na 4 ms. Czy masz link do posta na ten temat czy coś?To jest mój sposób na zrobienie tego, używam setTimeout:
Stosowanie:
źródło
set_interval
funkcję, aby NIE rozpoczynać nowego wykonania, chyba że nowy interwał jest mniejszy niż stary ..if (iv < this.iv) { clearInterval(this.timeout); this.start(false, iv); } else { this.iv = iv; }
O wiele prostszym sposobem byłoby posiadanie
if
instrukcji w odświeżonej funkcji i kontrolki do wykonywania polecenia w regularnych odstępach czasu. W poniższym przykładzie uruchamiam alert co 2 sekundy, a interwał (intrv
) można zmieniać dynamicznie ...źródło
Można to zainicjować w dowolny sposób. Timeout to metoda, której używałem, aby utrzymać go na szczycie godziny.
Potrzebowałem każdej godziny, aby rozpocząć blok kodu o tej godzinie. Zacznie się to przy starcie serwera i będzie działało co godzinę. Zasadniczo początkowy bieg ma rozpocząć interwał w ciągu tej samej minuty. Więc w sekundę od init, uruchamiaj natychmiast, a następnie co 5 sekund.
Alternatywnie, jeśli chcesz, aby coś się wydarzyło na początku, a potem na zawsze w określonym interwale, możesz po prostu wywołać to w tym samym czasie, co setInterval. Na przykład:
Tutaj mamy to uruchomienie po raz pierwszy, a potem co godzinę.
źródło
Prosta odpowiedź brzmi: nie możesz zaktualizować interwału już utworzonego timera . (Nie ma tylko dwie funkcje
setInterval/setTimer
iclearInterval/clearTimer
tak mającytimerId
można tylko wyłączyć go). Ale można się pewne rozwiązania. Spójrz na to repozytorium github .źródło
Nie mogłem zsynchronizować i zmienić szybkości mojego setIntervals i miałem zamiar zadać pytanie. Ale myślę, że znalazłem sposób. Z pewnością należy to poprawić, ponieważ jestem początkującym. Dlatego z przyjemnością przeczytam Twoje komentarze / uwagi na ten temat.
Jeśli chcesz liczniki zacząć zwiększać po załadowaniu strony, umieścić
counter1()
icounter2()
wfoo()
przedcountingSpeed
nazywa. W przeciwnym raziespeed
wykonanie zajmuje milisekundy. EDYCJA: Krótsza odpowiedź.źródło
nie może być krótszy
źródło
Jestem początkującym w javascript i nie znalazłem żadnej pomocy w poprzednich odpowiedziach (ale wiele dobrych pomysłów).
Ten fragment kodu poniżej przyspiesza (przyspieszenie> 1) lub zwalnia (przyspieszenie <1). Mam nadzieję, że może to pomóc niektórym osobom:
Z :
timer
: wartość początkowa setInterval w ms (rosnąca lub malejąca)refresh
: czas przedtimer
obliczeniem nowej wartości . To jest długość krokufactor
: różnica między starą a następnątimer
wartością. To jest wysokość krokuźródło
Utwórz nową funkcję:
źródło
Oto kolejny sposób tworzenia zwalniającego / przyspieszającego timera interwałowego. Przedział jest mnożony przez współczynnik, aż do przekroczenia całkowitego czasu.
źródło
źródło
Uncaught TypeError: interval is not a function
ale to zadziałało: jsfiddle.net/fgs5nwgnZainspirowany powyższym wewnętrznym wywołaniem zwrotnym , utworzyłem funkcję wywołującą wywołanie zwrotne w ułamkach minut. Jeśli limit czasu jest ustawiony na interwały takie jak 6 000, 15 000, 30 000, 60 000, będzie stale dostosowywał interwały zsynchronizowane z dokładnym przejściem do następnej minuty zegara systemowego.
źródło