Perbedaan Sensor Pemantau Tidur HRV vs SpO2 pada Smartwatch

admin
By admin
24 Min Read
baca 10 detik

MediaKeadilan.com – Smartwatch kini tidak cuma digunakan demi menyaksikan waktu atau menyambut baik notifikasi. Sejumlah perangkat telah dilengkapi sensor kesehatan yang dapat menolong pengguna memantau kondisi tubuh, termasuk ketika sedang tidur.

Dua istilah yang barangkali kerap ditemukan dalam fitur pemantauan tidur merupakan HRV dan SpO2. Keduanya sama-sama dapat menyerahkan informasi mengenai kondisi tubuh, namun memiliki fungsi dan cara pengukuran yang berbeda.

Lantas, apa perbedaan sensor pemantau tidur HRV vs SpO2 pada smartwatch? Simak penjelasannya berikut ini.

Apa Itu HRV pada Smartwatch?

HRV atau Heart Rate Variability merupakan ukuran variasi waktu di antara detak jantung yang berurutan. Jadi, HRV bukan sekadar menghitung berapa kali jantung berdetak dalam satu menit bagaikan pengukuran detak jantung biasa.

Smartwatch umumnya memakai sensor optik di untukan belakang perangkat demi mendeteksi perubahan aliran darah. Dari data tersebut, perangkat dapat memperkirakan variasi interval antardetak jantung dan menghasilkan nilai HRV.

Dalam pemantauan tidur, HRV dapat menyerahkan gambaran mengenai bagaimana tubuh merespons kondisi istirahat. Perubahan HRV juga dapat dipengaruhi oleh berbagai faktor, bagaikan stres, aktivitas fisik, kualitas tidur, konsumsi alkohol, hingga kondisi tubuh secara keseluruhan.

Karena itu, data HRV biasanya makin berguna apabila dilihat sebagai tren dari waktu ke waktu, bukan cuma berdasarkan satu angka pada satu malam.

Apa Itu SpO2 pada Smartwatch?

Berbeda dari HRV, SpO2 merupakan perkiraan tingkat saturasi oksigen dalam darah. Angka ini memperlihatkan persentase hemoglobin dalam darah yang mengangkut oksigen.

Smartwatch yang memiliki sensor SpO2 biasanya memakai teknologi sensor cahaya demi memperkirakan kadar oksigen dalam darah. Sensor akan memancarkan cahaya ke kulit, lalu menganalisis pantulan cahaya demi menghasilkan estimasi SpO2.

Dalam pemantauan tidur, data SpO2 dapat menolong pengguna menyaksikan perubahan kadar oksigen selama tidur. Beberapa smartwatch bahkan dapat memperlihatkan pola perubahan atau periode ketika kadar oksigen terdeteksi makin rendah.

Contents
Apa Itu HRV pada Smartwatch?Apa Itu SpO2 pada Smartwatch?Perbedaan HRV vs SpO2 demi Pemantauan TidurShare LinkTagBaca SelanjutnyaPemula Mau Beli Jam Tangan Lari? Ini Tips Memilih Produk yang TepatKumpulan Kuis MenarikKomentarTerkaitHuawei Watch GT 7 Series Bawa Fitur Cek Risiko Jantung dan DiabetesTekno | Sabtu, 03 Oktober 2026 | 17:52 WIBPemula Mau Beli Jam Tangan Lari? Ini Tips Memilih Produk yang TepatLifestyle | Selasa, 29 September 2026 | 18:35 WIB5 Smartwatch Amazfit Murah Terbaik, Baterai Awet hingga 2 MingguTekno | Selasa, 29 September 2026 | 11:59 WIBTerkiniAliansi Rakyat Menggugat Datangi Bareskrim, Bawa Bukti Baru Dugaan Pemalsuan Suket GibranNews | Rabu, 07 Oktober 2026 | 13:09 WIBPegawai Rutan Depok Dibayar Rp1 Juta Tiap Bawa Sabu demi NapiNews | Rabu, 07 Oktober 2026 | 13:07 WIBPutusan MK soal Pendidikan Gibran Bikin Publik Heboh: Loker Saja Minimal S1, Kok Bisa?News | Rabu, 07 Oktober 2026 | 13:05 WIBApakah Air Mawar Bisa Menghilangkan Flek Hitam?Lifestyle | Rabu, 07 Oktober 2026 | 13:05 WIBBukan Lagi Harga Turis, Makanan UMKM di MotoGP Mandalika 2026 Dijamin Masuk AkalBali | Rabu, 07 Oktober 2026 | 13:04 WIBGol Perdana Dean James demi Timnas Indonesia Lahir di Final, Suasananya Bikin MerindingBola | Rabu, 07 Oktober 2026 | 13:02 WIBU by Prodia Luncurkan U-Buddy, Integrasikan Data dari Berbagai Wearable dalam Satu AplikasiTekno | Rabu, 07 Oktober 2026 | 13:02 WIBSetelah New York, LPDP Jakarta Buka Jalan ke Kampus Top SeoulNews | Rabu, 07 Oktober 2026 | 13:02 WIBReview Bird in Hand: Pulang Demi Pernikahan, Kembali pada Luka LamaYour Say | Rabu, 07 Oktober 2026 | 13:00 WIBTas Penumpang Diaduk-aduk, Aksi Porter Bandara Ngurah Rai Sikat Uang Belasan Juta Terekam CCTVBali | Rabu, 07 Oktober 2026 | 12:56 WIBDiskusi TerpanasWNI Tentara Bayaran Rusia, Rendi Apriyanto Sempat Kirim Duit ke Ortu Tapi Rekening DiblokirOperasi Politik Presisi Prabowo: Preteli Siji-sijiJaksa Agung Burhanuddin Muncul di Istana, Bantah Bakal Dilantik jadi Jampidum5482 Korban Keracunan MBG, Viral Ucapan Wapres Gibran: Bawa Bekal dari Rumah, MBG Jangan DimakanRupiah Unjuk Gigi Paling Kuat se-Asia ke Level Rp17.894/USDTop Writer YoursayLiksJejak Aparat pada Kematian Pedagang Cermin saat Demo 27 Agustus 2026TERPOPULERMediaCommunitySocial MediaKOL ManagementAgencyEvent ProductionData Riset & Pengembangan AI

Namun, hasil pengukuran dari smartwatch merupakan estimasi, bukan pengganti alat medis atau pemeriksaan profesional.

Perbedaan HRV vs SpO2 demi Pemantauan Tidur

Agar makin mudah dipahami, berikut perbedaan keduanya:

Fitur HRV  SpO2

Yang diukur

Variasi interval detak jantung Perkiraan saturasi oksigen darah

Fokus informasi

Respons tubuh dan kondisi pemulihan Kondisi oksigenasi darah

Satuan

Cari Tahu

Kumpulan Kuis Menarik

Kalkulator Kecocokan Jodoh Online Menurut Primbon Jawa, Bantu Cek Keserasian Pasangan
Ikuti Kuisnya ➔

Gryffindor atau Slytherin? Cek Kepribadianmu di Kuis Asrama Hogwarts
Ikuti Kuisnya ➔

KUIS: Seberapa Leo Sih Kamu? Mengukur Tingkat Percaya Diri dan Karisma
Ikuti Kuisnya ➔

Kalkulator Weton Online, Cek Hari Lahir Menurut Penanggalan Jawa
Ikuti Kuisnya ➔

KUIS: Kacamata Apa yang Paling Cocok bersama Gayamu?
Ikuti Kuisnya ➔

KUIS: Sepatu Mana yang Cocok bersama Kepribadianmu?
Ikuti Kuisnya ➔

KUIS: Seberapa Kenal Kamu bersama Si Zodiak Cancer?
Ikuti Kuisnya ➔

KUIS: Tipe Karakter Apakah Kamu Saat Mati Listrik Melanda?
Ikuti Kuisnya ➔

KUIS: Seberapa Kenal Kamu bersama MPR RI?
Ikuti Kuisnya ➔

KUIS: Tipe Work-Life Balance Mana yang Paling Kamu Banget?
Ikuti Kuisnya ➔

KUIS: Siapa Kamu di Kru Bajak Laut Topi Jerami?
Ikuti Kuisnya ➔

let isDown = false; let startX; let scrollLeft; const slider = document.getElementById('quizSlider');

slider.addEventListener('mousedown', (e) => { isDown = true; slider.style.cursor="grabbing"; startX = e.pageX - slider.offsetLeft; scrollLeft = slider.scrollLeft; }); slider.addEventListener('mouseleave', () => { isDown = false; slider.style.cursor="grab"; }); slider.addEventListener('mouseup', () => { isDown = false; slider.style.cursor="grab"; }); slider.addEventListener('mousemove', (e) => { if(!isDown) return; e.preventDefault(); const x = e.pageX - slider.offsetLeft; const walk = (x - startX) * 2; slider.scrollLeft = scrollLeft - walk; });

slider.addEventListener('click', (e) => { if (isDown) e.preventDefault(); });

Komentar

Terkait

Huawei Watch GT 7 Series Bawa Fitur Cek Risiko Jantung dan Diabetes

Huawei Watch GT 7 Series Bawa Fitur Cek Risiko Jantung dan Diabetes

Tekno | Sabtu, 03 Oktober 2026 | 17:52 WIB

Pemula Mau Beli Jam Tangan Lari? Ini Tips Memilih Produk yang Tepat

Pemula Mau Beli Jam Tangan Lari? Ini Tips Memilih Produk yang Tepat

Lifestyle | Selasa, 29 September 2026 | 18:35 WIB

5 Smartwatch Amazfit Murah Terbaik, Baterai Awet hingga 2 Minggu

5 Smartwatch Amazfit Murah Terbaik, Baterai Awet hingga 2 Minggu

Tekno | Selasa, 29 September 2026 | 11:59 WIB

Terkini

Aliansi Rakyat Menggugat Datangi Bareskrim, Bawa Bukti Baru Dugaan Pemalsuan Suket Gibran

Aliansi Rakyat Menggugat Datangi Bareskrim, Bawa Bukti Baru Dugaan Pemalsuan Suket Gibran

News | Rabu, 07 Oktober 2026 | 13:09 WIB

Pegawai Rutan Depok Dibayar Rp1 Juta Tiap Bawa Sabu demi Napi

Pegawai Rutan Depok Dibayar Rp1 Juta Tiap Bawa Sabu demi Napi

News | Rabu, 07 Oktober 2026 | 13:07 WIB

Putusan MK soal Pendidikan Gibran Bikin Publik Heboh: Loker Saja Minimal S1, Kok Bisa?

Putusan MK soal Pendidikan Gibran Bikin Publik Heboh: Loker Saja Minimal S1, Kok Bisa?

News | Rabu, 07 Oktober 2026 | 13:05 WIB

Apakah Air Mawar Bisa Menghilangkan Flek Hitam?

Apakah Air Mawar Bisa Menghilangkan Flek Hitam?

Lifestyle | Rabu, 07 Oktober 2026 | 13:05 WIB

Bukan Lagi Harga Turis, Makanan UMKM di MotoGP Mandalika 2026 Dijamin Masuk Akal

Bukan Lagi Harga Turis, Makanan UMKM di MotoGP Mandalika 2026 Dijamin Masuk Akal

Bali | Rabu, 07 Oktober 2026 | 13:04 WIB

Gol Perdana Dean James demi Timnas Indonesia Lahir di Final, Suasananya Bikin Merinding

Gol Perdana Dean James demi Timnas Indonesia Lahir di Final, Suasananya Bikin Merinding

Bola | Rabu, 07 Oktober 2026 | 13:02 WIB

U by Prodia Luncurkan U-Buddy, Integrasikan Data dari Berbagai Wearable dalam Satu Aplikasi

U by Prodia Luncurkan U-Buddy, Integrasikan Data dari Berbagai Wearable dalam Satu Aplikasi

Tekno | Rabu, 07 Oktober 2026 | 13:02 WIB

Setelah New York, LPDP Jakarta Buka Jalan ke Kampus Top Seoul

Setelah New York, LPDP Jakarta Buka Jalan ke Kampus Top Seoul

News | Rabu, 07 Oktober 2026 | 13:02 WIB

Review Bird in Hand: Pulang Demi Pernikahan, Kembali pada Luka Lama

Review Bird in Hand: Pulang Demi Pernikahan, Kembali pada Luka Lama

Your Say | Rabu, 07 Oktober 2026 | 13:00 WIB

Tas Penumpang Diaduk-aduk, Aksi Porter Bandara Ngurah Rai Sikat Uang Belasan Juta Terekam CCTV

Tas Penumpang Diaduk-aduk, Aksi Porter Bandara Ngurah Rai Sikat Uang Belasan Juta Terekam CCTV

Bali | Rabu, 07 Oktober 2026 | 12:56 WIB

Diskusi Terpanas

1

WNI Tentara Bayaran Rusia, Rendi Apriyanto Sempat Kirim Duit ke Ortu Tapi Rekening Diblokir

5 Komentar
2

Operasi Politik Presisi Prabowo: Preteli Siji-siji

3 Komentar
3

Jaksa Agung Burhanuddin Muncul di Istana, Bantah Bakal Dilantik jadi Jampidum

1 Komentar
4

5482 Korban Keracunan MBG, Viral Ucapan Wapres Gibran: Bawa Bekal dari Rumah, MBG Jangan Dimakan

1 Komentar
5

Rupiah Unjuk Gigi Paling Kuat se-Asia ke Level Rp17.894/USD

0 Komentar

Top Writer Yoursay

Agustian Pamungkas

Agustian Pamungkas

27 Articles

Anggia Khofifah P

Anggia Khofifah P

24 Articles

Ryan Farizzal

Ryan Farizzal

19 Articles

e. kusuma .n

e. kusuma .n

19 Articles

Liks

Jejak Aparat pada Kematian Pedagang Cermin saat Demo 27 Agustus 2026

Jejak Aparat pada Kematian Pedagang Cermin saat Demo 27 Agustus 2026

13:10 WIB

×

Tanpa Suara Beda Artinya

Arkadia
Suara
Matamata
HiTekno
Bolatimes
Dewiku
Mobimoto
Himedik

Dapatkan Aplikasi MediaKeadilan.com

Play Store
App Store





document.cookie = "sso_data="+e.data.sso_data + "; Path=/" + "; Domain=" + Domain + "; Max-Age=" + (60 * 60 * 24) // 1 hari + "; SameSite=None" + "; Secure";

document.cookie = "sso_id="+e.data.user.id + "; Path=/" + "; Domain=" + Domain + "; Max-Age=" + (60 * 60 * 24) // 1 hari + "; SameSite=None" + "; Secure";

$('#myModal').hide();

$(".login-arkadiame").hide(); $(".profile-arkadiame").show(); $(".portfolio-arkadiame").show(); $('#portfolio-arkadiame').attr('href', URL + '/profile'); $('#portfolio-arkadiame').attr('target', '_blank'); $('#avatar').attr('src', 'https://www.arkadia.me/api/avatar/user/'+e.data.user.id); location.reload(); } } } },false);

const header = document.querySelector('.header');

let lastScroll = 0; let ticking = false;

window.addEventListener('scroll', () => { if (!ticking) { window.requestAnimationFrame(() => { handleScroll(); ticking = false; }); ticking = true; } });

function handleScroll() { const currentScroll = window.scrollY;

// aktifin fixed if (currentScroll > 300) { header.classList.add('fixed', 'shadow');

if (currentScroll > lastScroll) { // scroll ke bawah → tetap tampil (NO HIDE) header.classList.remove('hide'); header.classList.add('show'); } else { // scroll ke atas → tetap tampil juga header.classList.remove('hide'); header.classList.add('show'); }

} else { header.classList.remove('fixed', 'shadow', 'show', 'hide'); }

lastScroll = currentScroll; }



const headerHeight = header.offsetHeight; const menuOffset = menu.offsetTop;

window.addEventListener("scroll", function () { if (window.scrollY >= menuOffset - headerHeight) { menu.classList.add("fixed"); menu.style.top = headerHeight + "px"; } else { menu.classList.remove("fixed"); menu.style.top = "0"; } });

// biar aman bila resize window.addEventListener("resize", function () { menu.style.top = header.offsetHeight + "px"; }); });

// OPEN hamburger.onclick = () => { menu.classList.add("active"); overlay.classList.add("active"); hamburger.classList.add("active"); };

// CLOSE function closeMenu() { menu.classList.remove("active"); overlay.classList.remove("active"); hamburger.classList.remove("active"); }

overlay.onclick = closeMenu; closeBtn.onclick = closeMenu;

// SUBMENU document.querySelectorAll(".menu-link").forEach(item => { item.onclick = function() { const parent = this.parentElement;

document.querySelectorAll(".menu-list li").forEach(li => { if (li !== parent) li.classList.remove("open"); });

parent.classList.toggle("open"); }; });

const rect = this.getBoundingClientRect(); const clickX = e.clientX;

if (clickX > rect.right - 60) { e.preventDefault(); e.stopPropagation();

const parent = this.closest('.has-submenu');

document.querySelectorAll('.has-submenu').forEach(function(item) { if (item !== parent) item.classList.remove('active'); });

parent.classList.toggle('active'); } }); });

const slider = document.querySelector('.trending-slider'); const prev = document.querySelector('.trending-prev'); const next = document.querySelector('.trending-next');

if (!slider || !prev || !next) return;

let position = 0; const step = 200;

function updateButtons() { if (position >= 0) { prev.style.display = 'none'; } else { prev.style.display = 'block'; }

// batas kanan (manual) const maxScroll = slider.scrollWidth - slider.parentElement.clientWidth;

if (Math.abs(position) >= maxScroll) { next.style.display = 'none'; } else { next.style.display = 'block'; } }

next.onclick = () => { const maxScroll = slider.scrollWidth - slider.parentElement.clientWidth;

position -= step;

if (Math.abs(position) > maxScroll) { position = -maxScroll; }

slider.style.transform = `translateX(${position}px)`; slider.style.transition = '0.3s ease';

updateButtons(); };

prev.onclick = () => { position += step;

if (position > 0) { position = 0; }

slider.style.transform = `translateX(${position}px)`; slider.style.transition = '0.3s ease';

updateButtons(); };

// INIT updateButtons();

});

const accountBtn = document.getElementById('account-btn'); const account = document.querySelector('.account');

accountBtn.addEventListener('click', function(e) { e.stopPropagation(); account.classList.toggle('active'); });

document.addEventListener('click', function() { account.classList.remove('active'); });

btn.addEventListener('click', function(e) { e.preventDefault();

popup.classList.toggle('show'); btn.classList.toggle('active'); // ini buat rotate arrow });

// klik luar nutup + reset arrow document.addEventListener('click', function(e) { if (!btn.contains(e.target) && !popup.contains(e.target)) { popup.classList.remove('show'); btn.classList.remove('active'); } });

// [REST OF THE CODE REMAINS THE SAME - Modal functions, status check, etc.] // Modal functions function openStatusModal() { const overlay = document.getElementById('statusModalOverlay'); if (overlay) { overlay.classList.remove('hidden'); document.body.classList.add('modal-open');

// Focus on input setTimeout(() => { document.getElementById('inputStatus')?.focus(); }, 100); } }

function closeStatusModal() { const overlay = document.getElementById('statusModalOverlay'); if (overlay) { overlay.classList.add('hidden'); document.body.classList.remove('modal-open');

// Clear results const resultDiv = document.getElementById('statusResult'); const errorMessage = document.getElementById('errorMessage'); const inputStatus = document.getElementById('inputStatus');

if (resultDiv) resultDiv.classList.add('hidden'); if (errorMessage) errorMessage.classList.add('hidden'); if (inputStatus) inputStatus.value=""; } }

document.addEventListener('DOMContentLoaded', function() { const overlay = document.getElementById('statusModalOverlay'); const modal = document.getElementById('statusModal');

if (overlay && modal) { overlay.addEventListener('click', function(e) { if (e.target === overlay) { closeStatusModal(); } }); }

// Close with Escape key document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { const overlay = document.getElementById('statusModalOverlay'); if (overlay && !overlay.classList.contains('hidden')) { closeStatusModal(); } } }); });

// Pastikan konfigurasi ini sesuai bersama project Firebase const firebaseConfig = { apiKey: "AIzaSyAjP9vT2GzOKgp-fkhY2515IzAFQxvN0pw", authDomain: "suara-com.firebaseapp.com", databaseURL: "https://suara-com.firebaseio.com", projectId: "suara-com", storageBucket: "suara-com.firebasestorage.app", messagingSenderId: "238632102604", appId: "1:238632102604:web:df2e454964611569533069", measurementId: "G-H3X4SRHE6Y" };

const app = initializeApp(firebaseConfig); const messaging = getMessaging(app); const VAPID_KEY = 'BLEiEZfB2lemUOD0PGrnp87CV94FGYroVZqo9DfrOEcsMhZ4uFqzU5lJ8PnHlDhtujm51HyD1JgL10N-GB_7JME';

// Fungsi demi memperoleh token dan mengirimkannya ke server function retrieveToken() { getToken(messaging, { vapidKey: VAPID_KEY }).then((currentToken) => { if (currentToken) { console.log('FCM Token:', currentToken); subscribeByTopic(currentToken, 'news'); } else { // Jika tidak ada token, berarti izin masih belum diberikan. console.log('No registration token available. Request permission to generate one.'); // Tampilkan soft ask apabila diperlukan showSoftAsk(); } }).catch((err) => { console.error('An error occurred while retrieving token. ', err); }); }

// Fungsi demi mengirim token ke backend function subscribeByTopic(token, topic) { console.log("Subscribing to topic:", topic); fetch('https://www.mediakeadilan.com/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: token, topic: topic }) }) .then(response => { if (!response.ok) { throw new Error('Error subscribing to topic: ' + response.status); } console.log('Subscribed to "' + topic + '" successfully!'); }) .catch(error => { console.error("Failed to subscribe:", error); }); }

// Fungsi demi menampilkan dialog "soft ask" function showSoftAsk() { const softAsk = document.getElementById("soft-ask"); const alreadyPrompted = localStorage.getItem("notifPrompted");

// Hanya tampilkan apabila izin masih default dan masih belum sempat ditanya if (!alreadyPrompted && Notification.permission === "default") { setTimeout(() => { softAsk.style.display = "block"; }, 3000); // Tunda 3 detik } }

// MAIN logic function initializeNotificationFlow() { // Cek status izin notifikasi pada saat ini if (Notification.permission === 'granted') { console.log('Permission already granted. Retrieving token.'); retrieveToken(); // Jika telah diizinkan, langsung ambil token } else if (Notification.permission === 'default') { console.log('Permission is default. Showing soft ask.'); showSoftAsk(); // Jika masih belum ditentukan, tampilkan soft ask } else { console.log('Permission is denied.'); // Tidak menjalankan apa-apa apabila telah diblokir } }

// 1. Jalankan alur utama saat halaman dimuat initializeNotificationFlow();

// 2. Siapkan event listener demi dialog "soft ask" document.getElementById("allow-btn").addEventListener("click", () => { document.getElementById("soft-ask").style.display = "none"; localStorage.setItem("notifPrompted", "yes");

// Minta izin ke browser Notification.requestPermission().then(permission => { if (permission === "granted") { console.log('Notification permission granted.'); new Notification("Terima kasih! Notifikasi sukses diaktifkan 🎉"); // Setelah izin diberikan, BARU panggil fungsi demi mengambil token! retrieveToken(); } else { console.log('Unable to get permission to notify.'); } }); });

document.getElementById("deny-btn").addEventListener("click", () => { document.getElementById("soft-ask").style.display = "none"; localStorage.setItem("notifPrompted", "yes"); });

// 3. Handle notifikasi saat website sedang dibuka (foreground) onMessage(messaging, (payload) => { console.log('Message received. ', payload); const notificationTitle = payload.notification.title; const notificationOptions = { body: payload.notification.body, icon: payload.notification.icon, }; new Notification(notificationTitle, notificationOptions); });

document.addEventListener("DOMContentLoaded", () => { console.log("DOM is ready");

const nextArticle = document.getElementById("next-article"); if (!nextArticle) return;

const tagDetail = document.querySelector(".article-tags"); const navbar = document.querySelector(".navbar"); const closeButton = document.querySelector(".close-next");

if (!tagDetail || !closeButton) return;

const tagOffsetTop = tagDetail.getBoundingClientRect().top + window.pageYOffset;

const navbarHeight = navbar ? navbar.clientHeight : 0;

window.addEventListener("scroll", () => { if (window.pageYOffset > tagOffsetTop - navbarHeight) { nextArticle.style.display = "block"; } });

closeButton.addEventListener("click", () => { nextArticle.style.display = "none"; nextArticle.remove(); }); });

// klik nama trigger.addEventListener("click", function (e) { e.preventDefault(); popup.style.display = popup.style.display === "block" ? "none" : "block"; });

// klik luar = nutup document.addEventListener("click", function (e) { if (!e.target.closest(".article-profile")) { popup.style.display = "none"; } }); });

zoomableImages.forEach(img => { // Buat elemen div pembungkus (wrapper) secara dinamis const wrapper = document.createElement('div'); wrapper.className="dynamic-zoom-wrapper";

// Sisipkan wrapper tepat semasih belum gambar, lalu pindahkan gambar ke dalam wrapper img.parentNode.insertBefore(wrapper, img); wrapper.appendChild(img);

// Buat elemen tombol perbesar const zoomBtn = document.createElement('button'); zoomBtn.type="button"; zoomBtn.className="btn-perbesar"; zoomBtn.innerHTML = ` Perbesar`;

// Tambahkan aksi klik pada tombol buatan tersebut zoomBtn.addEventListener('click', function() { openImageLightbox(img); // Kirim elemen gambar langsung ke fungsi lightbox });

// Masukkan tombol ke dalam wrapper bersandingan bersama gambar wrapper.appendChild(zoomBtn); }); });

// Fungsi demi membuka Lightbox function openImageLightbox(imgElement) { const figure = imgElement.closest('figure'); // Dukung pencarian caption baik memakai tag

standar maupun class .caption const originalCaption = figure ? figure.querySelector('figcaption, .caption') : null;

const lightboxContainer = document.getElementById("imageLightbox"); const lightboxActiveImg = document.getElementById("lightboxActiveImg"); const lightboxCaption = document.getElementById("lightboxCaption");

if (imgElement && lightboxContainer && lightboxActiveImg) { // Setel sumber gambar lightboxActiveImg.src = imgElement.src;

// Setel teks caption apabila tersedia if (originalCaption && lightboxCaption) { lightboxCaption.innerText = originalCaption.innerText; lightboxCaption.style.display = "block"; } else if (lightboxCaption) { lightboxCaption.style.display = "none"; }

// Tampilkan modal lightboxContainer.style.display = "flex"; } }

// Fungsi demi menutup Lightbox function closeImageLightbox() { const lightboxContainer = document.getElementById("imageLightbox"); if (lightboxContainer) { lightboxContainer.style.display = "none"; } }

Artikel ini telah tayang di sumber aslinya. Baca selengkapnya di Sini

Share This Article