Saya ingin menggunakan penghitung waktu mundur sederhana yang dimulai pada 30 detik dari saat fungsi dijalankan dan berakhir pada 0. Tidak ada milidetik. Bagaimana bisa dikodekan?
147
Saya ingin menggunakan penghitung waktu mundur sederhana yang dimulai pada 30 detik dari saat fungsi dijalankan dan berakhir pada 0. Tidak ada milidetik. Bagaimana bisa dikodekan?
var count=30;
var counter=setInterval(timer, 1000); //1000 will run it every 1 second
function timer()
{
count=count-1;
if (count <= 0)
{
clearInterval(counter);
//counter ended, do something here
return;
}
//Do code for showing the number of seconds here
}
Untuk membuat kode penghitung waktu muncul dalam paragraf (atau di mana pun pada halaman), cukup tulis baris:
<span id="timer"></span>
di mana Anda ingin detik muncul. Kemudian masukkan baris berikut dalam timer()
fungsi Anda , sehingga terlihat seperti ini:
function timer()
{
count=count-1;
if (count <= 0)
{
clearInterval(counter);
return;
}
document.getElementById("timer").innerHTML=count + " secs"; // watch for spelling
}
Saya menulis skrip ini beberapa waktu lalu:
Pemakaian:
sumber
myCounter.stop();
Sejauh ini jawabannya tampaknya bergantung pada kode yang sedang dijalankan secara instan. Jika Anda mengatur timer untuk 1000 ms, itu sebenarnya akan menjadi sekitar 1008.
Inilah cara Anda harus melakukannya:
Untuk menggunakan, hubungi:
sumber
Ini satu lagi jika ada yang membutuhkan satu menit dan detik:
sumber
setTimeout(Decrement, 1000)
lebih disukai. stackoverflow.com/questions/6232574/…sumber
Math.floor
, bukanMath.round
Baru dimodifikasi @ jawaban ClickUpvote :
Anda dapat menggunakan IIFE (Ekspresi Fungsi yang Segera Diminta) dan rekursi untuk membuatnya sedikit lebih mudah:
Tampilkan cuplikan kode
sumber
Memperluas jawaban yang diterima, mesin Anda akan tidur, dll. Dapat menunda timer agar tidak berfungsi. Anda bisa mendapatkan waktu yang sebenarnya, dengan biaya pemrosesan yang sedikit. Ini akan memberikan waktu yang tersisa.
sumber
Anda dapat melakukan hal berikut dengan JS murni. Anda hanya perlu menyediakan fungsi dengan jumlah detik dan itu akan melakukan sisanya.
sumber
Berdasarkan solusi yang disajikan oleh @Layton Everson I mengembangkan penghitung termasuk jam, menit dan detik:
sumber
sumber
Solusi saya berfungsi dengan format waktu tanggal MySQL dan menyediakan fungsi panggilan balik. pada komplain. Penafian: hanya berfungsi dengan menit dan detik, karena inilah yang saya butuhkan.
sumber
Demi kinerja, kita sekarang dapat menggunakan requestAnimationFrame dengan aman untuk perulangan cepat, alih-alih setInterval / setTimeout.
Saat menggunakan setInterval / setTimeout, jika tugas loop mengambil lebih banyak waktu daripada interval, browser hanya akan memperpanjang loop interval, untuk melanjutkan rendering penuh. Ini menciptakan masalah. Setelah beberapa menit setInterval / setTimeout kelebihan, ini dapat membekukan tab, browser, atau seluruh komputer.
Perangkat Internet memiliki beragam kinerja, sehingga sangat mustahil untuk melakukan hardcode waktu interval tetap dalam milidetik!
Menggunakan objek Tanggal , untuk membandingkan mulai Tanggal Epoch dan saat ini. Ini jauh lebih cepat daripada yang lainnya, browser akan menangani semuanya, pada 60FPS yang stabil ( 1000/60 = 16.66ms per frame ) - seperempat kedipan mata - dan jika tugas dalam loop membutuhkan lebih dari itu , browser akan menjatuhkan beberapa repaints.
Ini memungkinkan margin di depan mata kita memperhatikan ( Manusia = 24FPS => 1000/24 = 41.66ms by frame = animasi cair!)
https://caniuse.com/#search=requestAnimationFrame
sumber