我使用 Blazor 创建了一个简单的 Qr 和条形码扫描应用程序。在手机上打开时,目前只能访问前置摄像头。但我需要旋转摄像头并访问后置摄像头。我使用 Zxing js 库扫描二维码和条形码,并使用 js-interop 访问了这个 js 文件。下图显示了我的应用程序的实际外观。
单击相机旋转按钮时,我的前置摄像头应该旋转,我应该能够访问后置摄像头,如果再次单击旋转按钮,我应该再次访问前置摄像头。这与移动相机旋转相同。
我的 QrDialog.razor 文件
<MudDialog Class="qr-dialog">
<DialogContent>
<input type="hidden" class="form-control mb-2" @bind-value="outputText"/>
<QrScanner ScanResult="((e) => { outputText=e; })" CodeKey="CodeKey" DialogClose="(()=>{MudDialog.Close(DialogResult.Ok(true));})"/> @*Qr Scaning Component*@
<div class="footer-btn-scan">
<MudIconButton Icon="@Icons.Material.Filled.HighlightOff" Size="Size.Medium" id="resetButton"></MudIconButton>@* reset button*@
<MudIconButton Icon="@Icons.Material.Filled.Cameraswitch" Size="Size.Medium" id="rotateButton"></MudIconButton>@*camera rotate button*@
</div>
<MudFab ButtonType="ButtonType.Submit" Icon="@Icons.Material.Filled.QrCodeScanner" Class="scan-btn" id="startButton"/> @*scan button*@
</DialogContent>
QrScanner 组件
<div class="qr-scanner">
<div class="box">
<img src="/img/qr.png" id="qr-img"/>
<video id="video" class="d-none"></video>
<div class="line"></div>
<div class="angle"></div>
</div>
</div>
@code{
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender) return;
await _jsRuntime.InvokeAsync<string>("zxing.start", true, DotNetObjectReference.Create(this));
}
}
我已经在barcode.js 文件中包含了旋转功能。但不工作。
(function () {
window.zxing = {
start:function (autostop, wrapper) {
// some code..
document.getElementById('rotateButton').addEventListener('click', () => {
var v = document.getElementById('video');
navigator.mediaDevices.getUserMedia({
video: {
facingMode: {
exact: 'environment'
}
}
}).then(stream => {
console.log("camera rotated");
}).catch((err) => {
console.log(err);
});
})
}
};
})();
所有其他功能都正常工作,即使我的瓶颈在于上述 js 文件中的这个旋转功能。如果有人请根据我的要求更换旋转功能,它将纠正我的问题。非常感谢您的所有帮助。