52 lines
1.3 KiB
JavaScript
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);
|