记录--uni-app App端半屏连续扫码
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

本文用一个简单的 demo 讲解 App端 半屏连续扫码 的实现方式,包括(条形码、二维码等各种各样的码)。
我会从实现思路讲起,如果你比较急可以直接跳到 动手实现 章节获取代码。
开发和运行环境
需求收集
看到论坛上有人想在 App端 实现 连续扫码 功能。
认真看了下图,还是个 半屏 的扫码框。


只是看到提了下需求,并没搜到多少解决方案。
于是我去 uni-app官网 看了下,找到相关的内容:
但 <camera> 组件不支持 App 端使用(至少在写本文时不支持);
uni.scanCode 可以扫码,但会跳到另一个界面,并在全屏的模式下扫码,也不支持连续扫码。
当然,用 uni.scanCode 可以在扫码成功后再重新执行一次,这样就能实现连续扫码的功能,但界面会跳来跳去(跳到扫码界面,成功后又跳回app的界面,再执行又跳到扫码界面......)。
提炼需求
根据上面的信息,提炼出3个关键词:
- App端
- 半屏
- 连续扫码
我采用了 DCLOUD社区 《uni-app怎么自定义扫码和连续扫》 里的需求。粗略的写了下布局(我没有精细写样式)
最终实现的效果如下图所示
我用在线工具生成了2个二维码,内容分别为 “雷猴” 和 “鲨鱼辣椒”。
通过扫描二维码,把内容添加到页面中。
实现思路
查文档
既然 uni-app 的组件和API 都没有提供这方面的帮助,我就去 插件市场 看了下,要么只支持小程序,要么是收费的。
收费的? 算了,大家都是打工人。
现在 uni-app 官方文档 和 插件市场 两条路都走不通(主要是我穷),那还有一条路:html5+
node.js 可以理解为前端向服务端的延展, html5+ 可以理解为前端向 App 的延展。
为了不浪费大家时间,我整理出本文要用到的 API 和 模块。
打开 html5+ 可以找到 barcode 扫码模块,该模块有个 create 方法 用来创建扫码识别控件。
但 plus.barcode.create() 方法又需要用到 plus.webview ,也就是会涉及到 webview 模块 。
webview 模块 是用来管理应用窗口界面的,也就可以弄一个半屏的窗口出来。
整理
相关方法都找到七七八八了,只需把逻辑整理好就可以编码了。
- 【步骤1】弄一个窗口出来(半屏,或者你自己定个尺寸和定位吧)
- 【步骤2】弄一个扫码控件对象出来
- 【步骤3】将扫码控件添加到窗口
- 【步骤4】扫码成功后将结果添加到页面上
- 【步骤5】重新调用扫码方法
动手实现
我将上面5个步骤都在代码注释里标记出来了。
<template>
<view class="page">
<view class="title">扫码结果</view>
<view class="result_list">
<view v-for="item in list" :key="item" class="result_li">
{{ item }}
</view>
</view>
</view>
</template> <script setup>
import { onReady } from '@dcloudio/uni-app'
import { ref } from 'vue' let webView = null // webview容器
let barcode = null // 扫码框 const list = ref([]) // 扫码结果 - 列表 // 扫码成功回调
function onmarked(type, result) {
// 【步骤4】将扫码结果添加到 list 里
list.value.push(result) // 【步骤5】1秒后再重新开启扫码
setTimeout(() => {
barcode.start()
}, 1000)
} // 创建窗口和扫码控件
function createBarcode() {
// 【步骤1】判断有没有创建过 webview 容器,如果没有就执行创建操作
if (!webView) {
webView = plus.webview.open(
'',
'barCodeBox',
{
top: '60px',
width: '100%',
height: '200px'
}
)
} // 【步骤2】判断有没有创建过 扫码框,如果没有就执行创建操作
if(!barcode){
barcode = plus.barcode.create(
'barcode',
[plus.barcode.QR], // 只扫二维码
{
top:'0px',
left:'0px',
width: '100%',
height: '200px',
position: 'static',
scanbarColor: '#f1c01f',
frameColor: '#c0ff01'
}
) barcode.onmarked = onmarked // 扫码结果回调函数 // 【步骤3】将扫码框添加到 webview 里
plus.webview.getWebviewById('barCodeBox').append(barcode)
} barcode.start() // 开始扫码
} // 在页面加载时,延迟300毫秒执行创建扫码框函数
onReady(() => {
setTimeout(() => {
createBarcode()
}, 300)
})
</script> <style>
.page {
height: 100vh;
display: flex;
flex-direction: column;
box-sizing: border-box;
padding: 200px 20rpx 0;
} .title {
font-size: 50rpx;
color: #333;
} .result_list {
flex: 1;
overflow-y: auto;
box-sizing: border-box;
padding-top: 20rpx;
} .result_li {
box-sizing: border-box;
margin-bottom: 20rpx;
padding: 10rpx 20rpx;
border: 1px solid #7298c8;
border-radius: 10rpx;
font-size: 40rpx;
}
</style>
样式我没写得很精细,只是做了个粗糙的布局。
相关文档
前端佬使用 uni-app 开发 App端 ,建议粗略过一遍 HTML5+ 文档,然后抽几个自己感兴趣的功能做个demo出来(这样能省钱,插件市场的东西也不便宜)。
扫码相关
plus.barcode.create 的第二个参数是一个数组,里面可以设置需要识别的条码类型,可以同时支持多种条码。
barcode 支持多种条码:
- QR: QR二维码,数值为0
- EAN13: EAN条形码标准版,数值为1
- EAN8: ENA条形码简版,数值为2
- AZTEC: Aztec二维码,数值为3
- DATAMATRIX: Data Matrix二维码,数值为4
- UPCA: UPC条形码标准版,数值为5
- UPCE: UPC条形码缩短版,数值为6
- CODABAR: Codabar条形码,数值为7
- CODE39: Code39条形码,数值为8
- CODE93: Code93条形码,数值为9
- CODE128: Code128条形码,数值为10
- ITF: ITF条形码,数值为11
- PDF417: PDF 417二维条码,数值为13
我们在本例中主要用到 barcode.create 方法创建扫码控件。
本文只用了 扫码成功的回调 ,在你的业务中可能还需要用到 扫码失败的回调 。
更多的配置和样式设置,建议自行查阅官方文档。本文的案例也有对扫码框做了颜色的调整(随便选了个颜色)。
本文转载于:
https://juejin.cn/post/7072621583939928077
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

记录--uni-app App端半屏连续扫码的更多相关文章
- 微信小程序实现连续扫码功能(uniapp)
注:本文使用的是 uniapp 语法. 微信小程序提供了扫码API:wx.scanCode,但它只能扫一次码,想要实现连续扫码,需要借用 camera 组件.camera 组件不仅能拍照,还具有扫码功 ...
- uni-app自定义app端的扫码界面
记得当时是在西班牙有这样的一个需求,需要自定义扫码页面,还需要加上西班牙文,当时是在一个组件里面找到了这样的一个方法,全文大部分使用的app端的Native里面的方法,记录一下,跑路了项目代码要删库了 ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- Android APP 多端适配
Android APP 多端适配 传统的多终端适配方案,是为大尺寸 Pad开发一个特定的 HD版本. 但是目前支持 Android 系统的设备类型越来越丰富,不同类型的设备尺寸也越来越多样化,特定的H ...
- 呛口大话APP 移动端到底怎么玩
[上海站]活动概况 时间:2016年04月09日13:30-16:30 地点:上海市黄浦区黄陂北路227号中区广场105室WE+联合办公空间 主办:APICloud.七牛.听云 报名网址:http:/ ...
- 年过三十,我为什么要学习ios 与安卓App 移动端技术
今天跟我华为的同学谈了一些技术/人生方面的感悟,感觉自己的人生目标及后面的工作/生活有了一个比较清晰的认识与规划. 首先我谈了一下我为什么要学习ios与安卓技术,我其实不想通过这二门技术来提升我的薪酬 ...
- Android 编程下通过 Theme 和 Style 避免 APP 启动闪黑屏
之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页.直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量 ...
- APP移动端自动化测试工具选型“兵器谱”一览(主流开源工具)
(下面大多数工具都是开源工具,在github,码云等开源平台都能找到) "测试那点事儿”在看到360旗下的测试团队整理的关于目前APP移动端自动化相关的工具,觉得总结的很到位,对目前大多数中 ...
随机推荐
- Codeforces Round #887 (Div. 2) A-D
比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; int a[507]; bool ...
- CF383C Propagating tree
题目链接 题目 见链接. 题解 知识点:DFS序,树状数组. 我们需要对子树的不同奇偶层加减,用dfn序可以解决子树问题,但是并不能直接分奇偶. 一种比较麻烦的思路是,将dfn序分成两个序列,一个是偶 ...
- NC16122 郊区春游
题目链接 题目 题目描述 今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci.经过铁子和顺溜的提议,他们决定去其中的R个郊区玩耍(不考虑 ...
- 使用JS保存数据
1 保存到text中 demo1.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- Linux crontab不执行
Linux 系统里面计划任务,crontab 没有如期执行这是运维工作中比较常见的一种故障了. 下面结合最近部署自动脚本不执行问题排查步骤: 1.检查 crontab 服务是否正常 [dmdba@te ...
- P1481魔族密码 题解(字典树)
魔族密码 题目背景 风之子刚走进他的考场,就-- 花花:当当当当~~偶是魅力女皇--花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕--(杀死人的眼神)快说题目!否则---_-### 题目描述 花花 ...
- 我的第一个项目(十三) :组件间传值的一些方案(vuex,eventbus,localStorage)
好家伙, 先说一下我的需求,我要组件间传值 1.eventBus 前端兄弟组件传值eventbus无法使用 不报错也不触发,就很奇怪 //eventBus.js import Vue from & ...
- 【Azure 应用服务】应用代码中需要使用客户端证书访问服务接口,部署在应用服务后报错不能找到证书(Cannot find the X.509 certificate)
问题描述 在应用中,需要访问另一个服务接口,这个接口需要使用客户端证书进行认证.在代码中使用 System.Security.Cryptography.X509Certificates 加载Windo ...
- 手把手带你快速上手香橙派AIpro
本文分享自华为云社区<香橙派AIpro快速上手指南>,作者:昇腾CANN. 1 前言 作为业界首款基于昇腾深度研发的AI开发板,Orange Pi AIpro无论在外观上.性能上还是技术服 ...
- 多线程系列(十一) -浅析并发读写锁StampedLock
一.摘要 在上一篇文章中,我们讲到了使用ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题. 如果继续深入的分析ReadWriteLock,从锁的角度分析,会发现它有一个潜在的问 ...