Gereksinimler ve Ön Hazırlık
JavaScript ile geri sayım sayacı yapmaya başlamadan önce herhangi bir kütüphaneye veya karmaşık bir geliştirme ortamına ihtiyacınız yoktur. Modern tarayıcıların desteklediği ES6+ sözdizimi yeterlidir.
- Modern bir kod editörü (VS Code gibi).
- Temel HTML5 yapısı hakkında bilgi.
- Tarayıcı konsolunu (F12) kullanarak hata ayıklama yeteneği.
- Tüm kodları tek bir .js dosyasında veya script etiketi içerisinde çalıştırabilirsiniz.
Adım 1: HTML Yapısını Kurma
Geri sayım sayacının ekranda görüneceği alanı tanımlamak için semantik HTML etiketleri kullanmalıyız. Bu, hem erişilebilirlik hem de JavaScript ile veriye erişim kolaylığı sağlar.
00 GÜN
00 SAAT
00 DAKİKA
00 SANİYE
Yukarıdaki kod bloğu, her bir zaman birimi için ayrı bir ID tanımlayarak JavaScript ile bu alanlara veri yazmamızı kolaylaştırır.
Adım 2: JavaScript ile Zaman Farkını Hesaplama
Geri sayım mantığının merkezinde, hedef tarih ile şu anki tarih arasındaki farkı milisaniye cinsinden hesaplamak yatar. new Date() nesnesi ile zaman yönetimi oldukça basittir.
const hedefTarih = new Date("Dec 31, 2026 23:59:59").getTime();
function zamanHesapla() {
const simdi = new Date().getTime();
const fark = hedefTarih - simdi;
const gun = Math.floor(fark / (1000 * 60 * 60 * 24));
const saat = Math.floor((fark % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const dakika = Math.floor((fark % (1000 * 60 * 60)) / (1000 * 60));
const saniye = Math.floor((fark % (1000 * 60)) / 1000);
return { gun, saat, dakika, saniye };
}
Bu fonksiyon, hedef tarih ile şu an arasındaki farkı matematiksel işlemlerle gün, saat, dakika ve saniye birimlerine böler.
Adım 3: setInterval ile Dinamik Güncelleme
Geri sayımın her saniye güncellenmesi için setInterval fonksiyonunu kullanırız. Bu fonksiyon, belirttiğimiz sürede bir kod bloğunu tekrar tekrar çalıştırır.
const timer = setInterval(() => {
const zaman = zamanHesapla();
document.getElementById("gun").innerText = zaman.gun;
document.getElementById("saat").innerText = zaman.saat;
document.getElementById("dakika").innerText = zaman.dakika;
document.getElementById("saniye").innerText = zaman.saniye;
if (zaman.fark < 0) {
clearInterval(timer);
document.getElementById("geri-sayim").innerHTML = "Süre Doldu!";
}
}, 1000);
Burada 1000 milisaniye (1 saniye) aralıklarla DOM (Document Object Model) güncellenir. Süre dolduğunda clearInterval ile döngü durdurulur.
Adım 4: Performans ve Hata Yönetimi
JavaScript ile sayaç yaparken en yaygın hata, DOM güncellemelerinin çok sık yapılmasıdır. requestAnimationFrame veya verimli bir setInterval kullanımı performansı artırır.
Kritik Uyarı: Kullanıcı tarayıcı sekmesini değiştirdiğinde veya cihazı uyku moduna aldığında JavaScript zamanlayıcıları yavaşlayabilir. Gerçek zamanlı kritik uygulamalarda sunucu saati ile senkronizasyon yapmanız önerilir.
Aşağıdaki örnekte, sayıların önüne sıfır ekleyerek (padding) daha estetik bir görüntü elde etmeyi gösteriyoruz:
function formatla(sayi) {
return sayi < 10 ? "0" + sayi : sayi;
}
// Güncelleme kısmında kullanımı:
document.getElementById("saniye").innerText = formatla(zaman.saniye);
Adım 5: Yöntemlerin Karşılaştırılması
Geri sayım sayacı oluştururken tercih edilebilecek farklı yaklaşımların avantaj ve dezavantajlarını aşağıda bulabilirsiniz.
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| setInterval | Basit ve kolay uygulanabilir. | Uzun süreli işlemlerde sapma yapabilir. |
| requestAnimationFrame | Ekran yenileme hızıyla uyumlu, akıcı. | Daha karmaşık bir yapı gerektirir. |
| Sunucu Senkronizasyonu | En doğru zamanı verir. | Ekstra sunucu yükü oluşturur. |
Adım 6: Güvenlik ve Kod Kalitesi
JavaScript kodunuzu yazarken XSS (Cross-Site Scripting) saldırılarına karşı dikkatli olmalısınız. Kullanıcıdan gelen veriyi doğrudan innerHTML içine yerleştirmek yerine innerText veya textContent kullanmak her zaman daha güvenlidir.
Sorumluluk Reddi: Bu rehberdeki kodlar eğitim amaçlıdır. Üretim ortamında (production) kullanırken, özellikle kullanıcı girdisi alıyorsanız, girdileri mutlaka sanitize edin (temizleyin).
Sıkça Sorulan Sorular
Geri sayım neden bazen sapıyor?
JavaScript tek iş parçacıklı (single-threaded) bir dildir. Tarayıcıda ağır bir işlem yapıldığında sayaç kısa süreliğine donabilir veya gecikebilir. Bunu engellemek için her döngüde farkı yeniden hesaplamak en iyi yöntemdir.
Süre bittiğinde ne yapmalıyım?
Süre bittiğinde sadece metni değiştirmekle kalmayıp, bir fonksiyon tetikleyerek kullanıcıyı yönlendirebilir veya bir formun kilidini açabilirsiniz.
Mobil cihazlarda çalışır mı?
Evet, tüm modern mobil tarayıcılar JavaScript'in Date ve setInterval fonksiyonlarını tam destekler.
Daha fazla performans için ne yapabilirim?
DOM elementlerini döngünün dışında bir kez tanımlayıp (cache'leyerek), sadece içeriklerini güncellemek tarayıcıyı daha az yorar.
Farklı saat dilimlerini nasıl yönetirim?
UTC zaman damgalarını (timestamp) kullanarak tüm dünyadaki kullanıcılar için aynı hedef süreyi sabitleyebilirsiniz.
Geri Sayım Sayacını Özelleştirme: Görsel ve Fonksiyonel İpuçları
Sayacınızın temel işlevselliğini kurduktan sonra, kullanıcı deneyimini iyileştirmek için görsel geri bildirimler eklemek oldukça önemlidir. Örneğin, süre azaldığında rakamların rengini değiştirmek veya süre bittiğinde bir animasyon tetiklemek, kullanıcı etkileşimini artırır.
Süre Azaldığında Dinamik Renk Değişimi
Süre kritik bir seviyeye (örneğin son 10 saniye) düştüğünde, sayacın rengini kırmızıya çevirerek kullanıcıda aciliyet hissi yaratabilirsiniz. Bunu setInterval fonksiyonu içerisinde basit bir koşullu ifade ile yönetmek mümkündür.
function updateUI(secondsLeft) {
const timerElement = document.getElementById('timer');
if (secondsLeft {
if (!document.hidden) {
// Sayfa görünür olduğunda sayacı hemen güncelle
refreshTimer();
}
});
Sonuç
JavaScript ile dinamik bir geri sayım sayacı yapmak, hem temel programlama mantığını anlamak hem de kullanıcı arayüzünü canlı tutmak için harika bir projedir. Bu rehberde öğrendiğiniz Date nesnesi, setInterval döngüsü ve DOM manipülasyonu teknikleri, ileride geliştireceğiniz daha karmaşık uygulamaların temelini oluşturacaktır.
Bir sonraki adım olarak, bu sayacı bir CSS kütüphanesi (Tailwind CSS gibi) ile görselleştirmeyi veya sürenin bitiminde bir "Callback" fonksiyonu tetikleyerek web sitenizde farklı bir etkileşim başlatmayı deneyebilirsiniz. Kodlarınızı düzenli tutmayı ve her zaman modern sözdizimini tercih etmeyi unutmayın.


Yorumlar (0)
Yorum Yaz