Aplikasi Jam Digital Masjid | Gratis
// stop suara function stopAzanSound() if (currentAudio) currentAudio.close().catch(e=>console.log); currentAudio = null; azanMsgSpan.innerText = "⏹️ Suara dihentikan"; setTimeout(() => if (azanMsgSpan.innerText === "⏹️ Suara dihentikan") // refresh nanti update otomatis , 1500);
// cek jadwal setiap detik, jika waktu saat ini sesuai dengan salah satu waktu sholat (menit ke-0 sampai ke-1) function checkAzanSchedule(now) const hours = now.getHours().toString().padStart(2,'0'); const minutes = now.getMinutes().toString().padStart(2,'0'); const currentHM = `$hours:$minutes`; for (let p of prayerNamesOrder) let waktu = prayerSchedule[p]; if (waktu && waktu === currentHM) if (lastAzanTriggerHourMin !== currentHM) lastAzanTriggerHourMin = currentHM; triggerAzan(p); return true; // reset flag ketika menit berubah & tidak ada kecocokan if (lastAzanTriggerHourMin !== currentHM) // tidak reset khusus, biarkan saja return false; aplikasi jam digital masjid gratis
.hijri-date font-size: 0.95rem; background: #2c5a50; padding: 4px 12px; border-radius: 30px; color: #f9eec1; currentAudio = null
.prayer-time font-size: 1.6rem; font-family: monospace; font-weight: 700; color: #f0f3f5; margin-top: 6px; azanMsgSpan.innerText = "⏹️ Suara dihentikan"
// Render jadwal sholat di grid, highlight selanjutnya function renderPrayerTimes(now) if (!prayerGrid) return; prayerGrid.innerHTML = ""; let nowMinutes = now.getHours() * 60 + now.getMinutes(); let nextIdx = -1; let smallestDiff = Infinity; // menentukan sholat berikutnya for (let i = 0; i < prayerNamesOrder.length; i++) const nama = prayerNamesOrder[i]; let waktuStr = prayerSchedule[nama]; if (!waktuStr) continue; let [jam, menit] = waktuStr.split(":").map(Number); let totalMenit = jam * 60 + menit; let diff = totalMenit - nowMinutes; if (diff < 0) diff += 24*60; if (diff < smallestDiff) smallestDiff = diff; nextIdx = i; for (let i = 0; i < prayerNamesOrder.length; i++) "--:--"; const isNext = (i === nextIdx); const card = document.createElement('div'); card.className = 'prayer-card'; if (isNext) card.classList.add('next-prayer-highlight'); card.innerHTML = ` <div class="prayer-name">$nama</div> <div class="prayer-time">$waktu</div> $isNext ? '<div class="next-label">✨ BERIKUTNYA ✨</div>' : '' `; prayerGrid.appendChild(card); nextPrayerIndex = nextIdx;
// inisialisasi + update setiap detik let intervalId; function initApp() getLocationAndUpdate(); // coba ambil data jadwal // update jam tiap 1 detik intervalId = setInterval(() => updateClockAndDate(); , 1000); updateClockAndDate(); testBtn.addEventListener('click', () => stopAzanSound(); triggerAzan("Demo Azan"); ); resetBtn.addEventListener('click', () => stopAzanSound(); azanMsgSpan.classList.remove('azan-active'); azanMsgSpan.innerText = "🔇 Suara dihentikan manual"; setTimeout(() => updateAzanMessageDefault(), 2000); );
// Flag azan sudah dipanggil untuk waktu yang sama let lastAzanTriggerHourMin = "";