- Bab 4 dari 10
- 30 menit
- 1 latihan kode
- 4 soal kuis
Multimedia dan Web API HTML5
Di bab ini (9 bagian)
Tujuan bab ini
- Memutar audio dan video dengan
<audio>,<video>,controls, dan<source>, lengkap dengan subtitle lewat<track>. - Menyematkan halaman lain dengan
<iframe>dan menggambar sederhana di<canvas>. - Memakai Web Storage (
localStoragedansessionStorage) untuk menyimpan data kecil di browser. - Mengenal Geolocation API beserta izinnya, dan drag and drop secara sekilas.
Multimedia tanpa plugin
Dulu, memutar video di web butuh plugin seperti Flash. Plugin itu berat, sering crash, dan punya banyak celah keamanan. HTML5 menyelesaikannya dengan elemen <audio> dan <video> yang dipahami browser secara langsung.
Hasilnya: kotak video selebar 400px yang menampilkan gambar sampul.jpg sebelum diputar, dengan tombol play, volume, timeline, layar penuh, dan menu subtitle bawaan browser.
Mari bedah:
controlsadalah atribut boolean yang memunculkan tombol pemutar. Tanpacontrols, video tampil tapi pengguna tidak bisa mengaturnya, kecuali kamu membuat tombol sendiri dengan JavaScript.<source>boleh lebih dari satu. Browser mencoba dari atas ke bawah dan memakai format pertama yang bisa ia putar. Atributtypemembantu browser melewati format yang tidak didukung tanpa harus mengunduhnya dulu.<track>menambahkan subtitle atau caption dari file WebVTT (.vtt).kind="subtitles"untuk terjemahan,kind="captions"untuk transkrip termasuk suara latar seperti "[musik]".srclangberisi kode bahasa,labeladalah nama di menu, dandefaultmengaktifkannya sejak awal.- Teks di dalam
<video>hanya muncul di browser yang sangat lama.
Isi file .vtt sederhananya seperti ini:
<audio> bekerja dengan cara yang sama, hanya tanpa gambar:
Atribut lain yang berguna: autoplay, loop, muted, dan preload. Perlu diingat, browser modern memblokir autoplay yang bersuara. Video autoplay biasanya hanya boleh jalan kalau juga muted.
iframe: jendela ke halaman lain
<iframe> menyematkan halaman web lain di dalam halamanmu. Contoh klasiknya adalah video YouTube atau peta.
Beri title agar screen reader tahu isi iframe, dan loading="lazy" agar iframe baru dimuat saat hampir terlihat. Atribut sandbox bisa membatasi apa yang boleh dilakukan halaman di dalamnya. Latihan kode di Ruang Materi pun berjalan di iframe ber-sandbox.
canvas: kertas gambar untuk JavaScript
<canvas> adalah area kosong berukuran piksel. HTML-nya hanya menyediakan tempat, gambarnya dibuat oleh JavaScript.
Hasilnya: persegi panjang hijau 100 x 60 piksel, berjarak 20 piksel dari kiri dan atas. Canvas dipakai untuk grafik, game, dan editor gambar. Untuk ikon atau logo yang harus tajam di semua ukuran, pilih <svg> karena berbasis vektor.
Web Storage: memori kecil di browser
Web Storage menyimpan pasangan kunci dan nilai berupa teks di browser pengguna. Ada dua jenis:
localStorage | sessionStorage | |
|---|---|---|
| Bertahan sampai | Dihapus manual atau oleh pengguna | Tab ditutup |
| Dibagi antar tab | Ya, untuk situs yang sama | Tidak, per tab |
| Cocok untuk | Tema gelap, isi keranjang, draft | Langkah form sementara |
Cara pakainya sama:
Hal yang sering menjebak:
- Semua nilai disimpan sebagai teks.
setItem("skor", 5)menyimpan"5". Ubah kembali denganNumber(...), dan untuk objek pakaiJSON.stringifysaat menyimpan sertaJSON.parsesaat membaca. - Kapasitasnya kecil, umumnya sekitar 5 MB per situs.
- Jangan simpan rahasia seperti password atau token sensitif. Semua JavaScript di halaman itu bisa membacanya.
- Storage bisa ditolak. Di mode privat tertentu, saat pengguna memblokir data situs, atau di dalam iframe sandbox, mengakses
localStoragebisa melempar error. Bungkus dengantry...catchsupaya halaman tetap jalan.
Contoh kecil yang aman, penghitung kunjungan yang tetap jalan walaupun storage diblokir:
Number(null) menghasilkan 0, jadi kunjungan pertama aman. Operator || 0 menjaga dari nilai rusak yang menghasilkan NaN.
Geolocation: lokasi dengan izin
Geolocation API memberi koordinat pengguna, tapi selalu meminta izin lewat popup browser, dan hanya tersedia di halaman HTTPS (atau localhost).
Fungsi pertama dipanggil kalau berhasil, fungsi kedua kalau pengguna menolak atau lokasi tidak tersedia. Selalu siapkan jalan keluar, misalnya kolom untuk mengetik kota secara manual. Minta izin tepat saat dibutuhkan, misalnya setelah tombol "Cari toko terdekat" diklik, bukan begitu halaman dibuka.
Drag and drop sekilas
Elemen bisa dibuat bisa diseret dengan atribut draggable="true". Alurnya: event dragstart di elemen yang diseret menyimpan data, dragover di area tujuan memanggil event.preventDefault() agar elemen boleh dijatuhkan di sana, lalu drop membaca data dan memindahkan elemen. Pola ini dipakai di papan tugas ala kanban dan area upload file.
Kesalahan umum
- Lupa
controlssehingga video tampil tapi tidak bisa diputar. - Hanya satu format video tanpa cadangan, atau
typeyang salah. - Mengharapkan autoplay bersuara padahal browser memblokirnya.
- Lupa bahwa nilai storage berupa teks, akhirnya
"1" + 1menghasilkan"11". - Mengakses
localStoragetanpatry...catchsehingga seluruh skrip berhenti di lingkungan yang memblokir storage. - Meminta izin lokasi saat halaman baru dibuka. Pengguna cenderung menolak permintaan yang tidak jelas alasannya.
Rangkuman
<audio>dan<video>memutar media tanpa plugin.controlsmemunculkan tombol,<source>memberi format cadangan,<track>menambahkan subtitle WebVTT.<iframe>menyematkan halaman lain,<canvas>menjadi area gambar yang dikendalikan JavaScript.localStoragebertahan lama,sessionStoragehilang saat tab ditutup. Keduanya menyimpan teks dan bisa ditolak, jadi pakaitry...catch.- Geolocation selalu butuh izin pengguna dan HTTPS. Drag and drop memakai
draggable,dragstart,dragover, dandrop.
Slide 8 sampai 8 dari deck HTML5 dan CSS3. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Pemutar video dengan tombol suka
Lengkapi halaman tutorial ini:
<video>diberi atributcontrols, dan<source>-nya diberitype="video/mp4".- Tambahkan
<track>di dalam video dengansrc="subtitle-id.vtt",kind="subtitles",srclang="id", danlabel="Indonesia". - Di JavaScript, tombol
#sukamenambah angka di#jumlahsebesar 1 setiap diklik dan menyimpannya kelocalStoragedengan kunci"suka". Baca nilai awalnya darilocalStoragejuga. - Bungkus semua akses
localStoragedengantry...catch. Latihan ini berjalan di iframe sandbox yang memblokir storage, jadi tanpa itu skripmu langsung error. - Gambar persegi berwarna apa saja di canvas
#logodengangetContext("2d")danfillRect.
Cek pemahaman
1Apa gunanya menulis beberapa `<source>` di dalam satu `<video>`?
2Teks apa yang tampil di elemen `#hasil`?
<p id="hasil"></p> <script> sessionStorage.setItem("skor", 5); const s = sessionStorage.getItem("skor") + 1; document.querySelector("#hasil").textContent = s; </script>3Geolocation API bisa membaca lokasi pengguna tanpa meminta izin, asalkan halamannya memakai HTTPS.
4Atribut apa yang membuat tombol play, volume, dan timeline bawaan muncul di `<video>`?