Saya telah menulis fungsi javascript yang menggunakan setInterval untuk memanipulasi string setiap sepersepuluh detik untuk sejumlah iterasi tertentu.
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);
};
Alih-alih menetapkan interval pada angka tertentu, saya ingin memperbaruinya setiap kali berjalan, berdasarkan penghitung. Jadi alih-alih:
var interval = setInterval(function() { ... }, 100);
Itu akan menjadi sesuatu seperti:
var interval = setInterval(function() { ... }, 10*counter);
Sayangnya, itu tidak berhasil. Sepertinya "10 * penghitung" sama dengan 0.
Jadi, bagaimana saya bisa mengatur interval setiap kali fungsi anonim berjalan?
sumber
--t
mungkin seharusnyat--
jsfiddle.net/albertjan/by5fdtimes
terlalu besar?t
menjaditick
, yang merupakan tebakan terbaik saya untuk apa pun "t" yang harus diperjuangkan.t
adalah nama variabel yang sangat buruk.Anda dapat menggunakan fungsi anonim:
UPDATE: Seperti yang disarankan oleh A. Wolff, gunakan
setTimeout
untuk menghindari kebutuhanclearInterval
.sumber
Saya suka pertanyaan ini - menginspirasi objek timer kecil dalam diri saya:
Contoh penggunaan
sumber
Saya memiliki pertanyaan yang sama dengan poster aslinya, apakah ini sebagai solusi. Tidak yakin seberapa efisien ini ....
sumber
setInterval
@RozzA salah - Ini masih mengalami keterlambatan yang sama dengan JavaScript lainnya, dan hampir setiap browser juga mengatur setInterval ke 4ms. Apakah Anda memiliki tautan ke pos tentang ini atau sesuatu?Ini adalah cara saya melakukan ini, saya menggunakan setTimeout:
Pemakaian:
sumber
set_interval
fungsi untuk TIDAK memulai eksekusi baru kecuali interval baru lebih kecil dari yang lama ..if (iv < this.iv) { clearInterval(this.timeout); this.start(false, iv); } else { this.iv = iv; }
Cara yang lebih sederhana adalah dengan memiliki
if
pernyataan dalam fungsi yang disegarkan dan kontrol untuk mengeksekusi perintah Anda secara berkala. Dalam contoh berikut, saya menjalankan peringatan setiap 2 detik dan interval (intrv
) dapat diubah secara dinamis ...sumber
Ini dapat dimulai sesuai keinginan Anda. timeout adalah metode yang saya gunakan untuk tetap di atas jam.
Saya membutuhkan setiap jam untuk memulai blok kode pada jam tersebut. Jadi ini akan dimulai pada startup server dan menjalankan interval setiap jam. Pada dasarnya langkah awal adalah memulai interval dalam menit yang sama. Jadi dalam satu detik dari init, jalankan segera lalu setiap 5 detik.
Bergantian jika Anda ingin memiliki sesuatu terjadi di awal dan kemudian selamanya pada interval tertentu Anda bisa menyebutnya pada waktu yang sama dengan setInterval. Sebagai contoh:
Di sini kita menjalankan ini pertama kali dan kemudian setiap jam.
sumber
Jawaban sederhana adalah Anda tidak dapat memperbarui interval waktu yang sudah dibuat . (Hanya ada dua fungsi
setInterval/setTimer
danclearInterval/clearTimer
, jadi memilikitimerId
Anda hanya dapat menonaktifkannya.) Tetapi Anda dapat membuat beberapa solusi. Lihatlah repo github ini .sumber
Saya tidak dapat menyinkronkan dan mengubah kecepatan setIntervals saya juga dan saya akan mengirim pertanyaan. Tapi saya pikir saya sudah menemukan cara. Ini tentu harus ditingkatkan karena saya seorang pemula. Jadi, saya dengan senang hati membaca komentar / komentar Anda tentang ini.
Jika Anda ingin counter untuk mulai meningkat setelah halaman dibuka, dimasukkan
counter1()
dancounter2()
difoo()
sebelumcountingSpeed
disebut. Jika tidak, diperlukanspeed
milidetik sebelum eksekusi. EDIT: Jawaban lebih pendek.sumber
tidak bisa lebih pendek
sumber
Saya seorang pemula dalam javascript, dan tidak menemukan bantuan dalam jawaban sebelumnya (tetapi banyak ide bagus).
Sepotong kode di bawah ini mempercepat (akselerasi> 1) atau melambat (akselerasi <1). Saya harap ini dapat membantu beberapa orang:
Dengan:
timer
: nilai awal setInterval dalam ms (meningkat atau menurun)refresh
: waktu sebelum nilai barutimer
dihitung. Ini adalah langkah panjangnyafactor
: kesenjangan antara nilai lama dan selanjutnyatimer
. Ini adalah tinggi langkahsumber
Buat fungsi baru:
sumber
Berikut ini cara lain untuk membuat timer interval perlambatan / akselerasi. Interval dikalikan dengan faktor hingga total waktu terlampaui.
sumber
sumber
Uncaught TypeError: interval is not a function
tapi ini berhasil: jsfiddle.net/fgs5nwgnTerinspirasi oleh panggilan balik internal di atas, saya membuat fungsi untuk memecat panggilan balik dalam sepersekian menit. Jika batas waktu diatur ke interval seperti 6.000, 15.000, 30.000, 60.000 akan terus menyesuaikan interval dalam sinkronisasi ke transisi yang tepat ke menit berikutnya jam sistem Anda.
sumber