bricks/bricks/qr.js
2026-02-25 14:48:43 +08:00

52 lines
1.3 KiB
JavaScript

var bricks = window.bricks || {};
bricks.QRCodeScan = class extends bricks.VBox {
/*
event:
recognized
识别到二维码
参数为识别到的正文
stopped
扫码已停止
无参数
*/
constructor(opts){
opts.width = '300px';
opts.height = '300px';
super(opts);
this.scan_config = {
fps: 10, // 每秒尝试识别次数
qrbox: { width: 250, height: 250 }, // 扫描框大小
aspectRatio: 1.0, // 保持正方形
disableFlip: false // 是否禁用镜像(移动端前置摄像头会镜像)
};
this.bind('click', this.stop.bind(this))
schedule_once(this.start.bind(this), 0.5)
}
get_qr_result(decodedText, decodedResult){
this.dispatch('recognized', {text: decodedText})
console.log('decodeText=', {text: decodedText})
this.scanner.stop()
}
errorhandle(msg){
console.log("识别失败:", msg);
}
start(){
this.scanner = new Html5Qrcode(this.id);
this.scanner.start({ facingMode: "environment" },
this.scan_config,
this.get_qr_result.bind(this),
this.errorhandle.bind(this)
).catch(err => {
console.error('启动摄像头失败')
});
}
stop(){
if (this.scanner && this.scanner.getState() !== Html5QrcodeScannerState.NOT_STARTED) {
this.scanner.stop();
this.dispatch('stopped');
}
}
}
bricks.Factory.register('QRCodeScan', bricks.QRCodeScan);