Deteksi prefer-color-scheme dengan Javascript
Bagian Dari Seri ✦ Implementasi Dark Mode
Mukadimah
Section titled MukadimahDi tulisan terakhir, kita sudah mengimplementasikan dark mode pada website menggunakan CSS variable, data-attribute dan javascript sebagai kontrolnya. Sekarang kita akan membawanya ke ‘level selanjutnya’.
Secara otomatis merubah tema berdasarkan preferensi warna sistem operasi pengguna dan menyimpan pengaturannya menggunakan jadi saat pengguna reload laman tema yang dipilih tidak ter-reset.
Menambah pendeteksi preferensi warna sistem operasi pengguna.
Section titled Menambah%20pendeteksi%20preferensi%20warna%20sistem%20operasi%20pengguna.Sebelumnya kita sudah membuat function toggleTheme()
, sekarang kita tulis kode untuk mendeteksi preferensi warna sistem operasi pengguna ketika website pertama kali dimuat menggunakan Window.matchMedia Web API
Sekarang, saat website dimuat tema akan otomatis berubah berdasarkan preferensi warna sistem operasi pengguna. Tapi masih ada kekurangan disini, tema website tidak akan berubah saat pengguna mengubah preferensi warna sistem operasi mereka. Untuk itu kita tambah listener
untuk “mendengar” perubahan tersebut.
Horray! Sekarang website kita sudah bisa mendeteksi perubahan preferensi warna pengguna. Tapi website kita belum menyimpan pengaturan pengguna saat merubah tema di website-nya sendiri. Saatnya kita simpan tema terakhir yang dipilih pengguna menggunakan Web API lainnya yaitu Window.localStorage
Simpan Pengaturan Tema Pengguna.
Section titled Simpan%20Pengaturan%20Tema%20Pengguna.Idenya simple, ketika pengguna mengganti tema, kia simpan pengaturannya ke local storage menggunakan Window.localStorage , dan jika kita mendatangi website lagi, kita cek pengaturan pengguna yang sudah kita simpan dan terapkan ke website. Okay, cukup penjelasannya, ayo kita implementasikan!
Kita baru saja mengimplementasikan makenisme simpan pengaturan untuk tema. Tapi javascript kita terlihat berantakan, banyak pengulangan disana. Ayo kita coba rapikan agar kodingan lebih ‘cantik’.
Bonus. Waktunya Refactor!
Section titled Bonus.%20Waktunya%20Refactor%21Seperti yang bisa kita lihat, setiap kita menyetel tema, kita selalu memanggil document.documentElement.setAttribute
dan localStorage.setItem
, sepertinya kita bisa membuat fungsi terpisah untuk ini lalu tinggal panggil fungsinya saja.
Ta-da! Sekarang kode kita jadi lebih rapi dan mudah dibaca kan? Semoga kalian menikmati dan menemukan tulisan ini berguna. Source code contoh tulisan ini bisa ditemukan dibawah
visualnaut/darkmode-css-variable
A simple implementation of dark mode on a website using CSS variable and javascript.