Table of Content
Introduction
Sebelumnya gue pake instascan di dalam modal, nah sekarang bisa di dalam swal2.
Screenshot nya
Kode nya
<script src="{{ url('/assets/plugins/custom/qrcode/instascan.min.js') }}"></script>
function updateStatus(status) {
Swal.fire({
title: 'Scan QR Code',
html: '<video id="preview" style="width: 100%;"></video>',
showCancelButton: true,
confirmButtonText: 'Close',
onOpen: () => {
const video = document.getElementById('preview');
const scanner = new Instascan.Scanner({ video: video });
scanner.addListener('scan', function (content) {
Swal.fire({
title: 'QR Code Scanned!',
text: content,
icon: 'success'
});
});
Instascan.Camera.getCameras().then(function (cameras) {
if (cameras.length > 0) {
const cameraToUse = cameras.length > 1 ? cameras[1] : cameras[0];
scanner.start(cameraToUse);
} else {
Swal.fire('No cameras found.');
}
}).catch(function (e) {
console.error(e);
Swal.fire('Error accessing camera.');
});
},
willClose: () => {
const video = document.getElementById('preview');
if (video.srcObject) {
const stream = video.srcObject;
const tracks = stream.getTracks();
tracks.forEach(track => track.stop());
}
}
});
}Penjelasan:
title: Menetapkan judul modal menjadi “Scan QR Code”.html: Menyisipkan elemen video HTML dengan IDpreview, yang akan digunakan untuk menampilkan umpan video dari kamera.showCancelButton: Menampilkan tombol “Cancel” di modal.confirmButtonText: Menetapkan teks tombol konfirmasi menjadi “Close”.onOpen: Ini adalah callback yang dipanggil ketika modal dibuka. Di sini, kita akan menginisialisasi pemindaian QR code.- Mengambil Elemen Video: Mengambil elemen video dengan ID
previewuntuk menampilkan umpan kamera. - Instascan.Scanner: Membuat instance dari
Instascan.Scanner, yang akan digunakan untuk memindai QR code. Parametervideodiatur ke elemen video yang telah diambil. content: Ini adalah data yang dipindai dari QR code.- Menampilkan Hasil: Menampilkan modal baru dengan judul “QR Code Scanned!” dan menampilkan isi dari QR code yang dipindai.
- Jika Kamera Ditemukan: Jika ada kamera yang ditemukan, pemindaian dimulai dengan kamera pertama (
cameras[0]). - Jika Tidak Ada Kamera: Menampilkan pesan “No cameras found.” jika tidak ada kamera yang tersedia.
- Error Handling: Jika terjadi kesalahan saat mencoba mengakses kamera, kesalahan tersebut dicetak ke konsol dan menampilkan pesan “Error accessing camera.”
- Menghentikan Stream: Jika elemen video memiliki
srcObject, kita mengambil stream dan menghentikan semua track (kamera) untuk membebaskan sumber daya.
NOTE: Gunakan kode dibawah agar lebih fleksibel device. Maksudnya adalah bila lo buka di hp/tablet otomatis akan pakai kamera belakang. Bila menggunakan laptop langsung webcam kita yg dipakai.
const cameraToUse = cameras.length > 1 ? cameras[1] : cameras[0];
scanner.start(cameraToUse);