uniapp中应用H5自定义二维码扫码界面
标签: Uniapp Vue uniapp vue barcode
最终效果

pages配置
{
"path": "components/barcode/scan-page",
"style": {
"navigationBarTitleText": "扫一扫"
}
}
组件代码
<template>
<view>
<!-- 扫码页面 -->
<!-- #ifndef APP-PLUS -->
<view class="wrap">
<view class="u-tips-color">
请在app中打开
</view>
</view>
<!-- #endif -->
</view>
</template>
<script>
export default {
data() {
return {
barcode: null,
flash: false,
tip: '将二维码放入框中,即可自动扫描',
}
},
onShow() {
// 页面展示时,重新启动扫描检测
if (this.barcode) {
this.barcode.start()
}
},
onLoad(params) {
const {
tip
} = params
if (tip) {
this.tip = tip
}
// #ifdef APP-PLUS
plus.navigator.setFullscreen(true); //全屏
let currentWebview = this.$scope.$getAppWebview();
this.createBarcode(currentWebview)
this.createTipInfoView(currentWebview)
this.createFlashBarView(currentWebview)
// #endif
},
mounted() {
},
methods: {
/**
* 创建二维码
* @param {Object} currentWebview
*/
createBarcode(currentWebview) {
if (!this.barcode) {
this.barcode = plus.barcode.create('barcode', [plus.barcode.QR], {
top: `0px`,
left: '0px',
height: `100%`,
width: '100%',
position: 'absolute',
background: '#FFCC00',
frameColor: '#FFCC33',
scanbarColor: '#FFCC33',
});
this.barcode.onmarked = this.onmarked;
this.barcode.setFlash(this.flash);
//此处未演示扫码成功回调的地址设置,实际请参考HTML5Plus API自行处理
//注意扫码区域需为正方形,否则影响扫码识别率
currentWebview.append(this.barcode);
}
this.barcode.start()
},
/**
* 创建提示信息
* @param {Object} currentWebview
*/
createTipInfoView(currentWebview) {
const content = new plus.nativeObj.View('content', {
top: '0px',
left: '0px',
height: '100%',
width: '100%'
},
[{
tag: 'font',
id: 'scanTips',
text: this.tip,
textStyles: {
size: '14px',
color: '#ffffff',
whiteSpace: 'normal'
},
position: {
top: '90px',
left: '10%',
width: '80%',
height: 'wrap_content'
}
}]);
currentWebview.append(content);
},
// 创建 开关灯按钮
createFlashBarView(currentWebview) {
const openImg = this.crtFlashImg('static/yellow-scanBar.png')
const closeImg = this.crtFlashImg('static/scanBar.png')
const scanBarVew = new plus.nativeObj.View('scanBarVew', {
top: '65%',
left: '40%',
height: '10%',
width: '20%',
},
closeImg);
scanBarVew.interceptTouchEvent(true);
currentWebview.append(scanBarVew);
scanBarVew.addEventListener("click", (e) => { //点亮手电筒
this.flash = !this.flash;
if (this.flash) {
scanBarVew.draw(openImg);
} else {
scanBarVew.draw(closeImg)
}
if (this.barcode) {
this.barcode.setFlash(this.flash);
}
}, false)
},
crtFlashImg(imgsrc) {
return [{
tag: 'img',
id: 'scanBar',
src: imgsrc,
position: {
width: '28%',
left: '36%',
height: '30%'
}
}, {
tag: 'font',
id: 'font',
text: '轻触照亮',
textStyles: {
size: '10px',
color: '#ffffff'
},
position: {
width: '80%',
left: '10%'
}
}]
},
// 扫码成功回调
onmarked(type, result) {
console.log('条码类型:' + type);
console.log('条码内容:' + result);
// 业务代码
// 核对扫描结果
// 判断是否是正确的格式
// 不正确则跳转到 错误页面
}
}
}
</script>
<style scoped>
.wrap {
height: calc(100vh);
/* #ifdef H5 */
height: calc(100vh - var(--window-top));
/* #endif */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
</style>
参考资料
h5 barcode
智能推荐
使用@Slf4j的正确方法
环境说明 Windows 10 1803 IDEA 2018.2.EAP Maven 3.5.2 这是正文 POM文件 这里要吐槽一下,其实不想写这篇的,因为网上一搜有很多,但是,我真的被坑到了,很多篇教程都是复制,依赖不全,导致我总是运行不了。教程教程,就是给人学习的,你不能默认你的读者掌握了其他相关的东西。 好了,在pom中添加上面的所有依赖,很多教程里都只说添加lombok依赖就行了,其实不...
2020南京邮电大学Mooc—在线期末考试主观卷
为客观卷部分,自取。 2020南京邮电大学Mooc—在线期末考试客观卷 1 ( 20分 ) 请对序列进行快速排序,写出前5趟的排序过程,按照如下答题格式进行答题,答题时注意不要漏掉下划线,下划线标错扣分。 答题格式: 第1趟: 第2趟:____________________________ 第3趟:____________________________ 第4趟:__________...
入门图论、图论的一些基本概念及实战
图论的一些基本概念及实战 基本概念 主要思想 实战 例题1-无向图的广深优先遍历 例题2--有向图的深度优先遍历(城市地图) 例题3--最少转机 基本概念 图就是有N个顶点和M条边组成的集合。图分为有向图和无向图,如果给图的每条边规定一个方向,那么得到的图称为有向图,其他边也称为有向边。在有向图中,与一个点相关联的边有出边和入边之分,而与一个有向边关联的两个点也有始点和终点之分。边没有方向的图称为...
maven 保姆教程
什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。 以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多...
动态规划类问题解题步骤 --附例题(小偷问题)
动态规划类问题解题步骤 --附例题(小偷问题) 动态规划 基本思想 适用情况 优点 解题步骤 实例分析 问题 解题步骤 动态规划 基本思想 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。 适用情况 最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优...
猜你喜欢
从Java到Android_Java基础_6.Java数组
6.Java数组 一、数组 1.使用数组的原因 2.什么是数组 3.数组声明 4.数组创建 5.数组在内存中的存储 6.局部变量和数组的默认值 7.数组的初始化 8.数组元素的引用 9.数组长度 二、一维数组 1.默认值 2.循环赋值 3.循环输出 4.数组下标越界异常 三、应用 1.求整数数组的累加和 2.求数组元素最大值 四、增强型for循环 1.增强型for循环 2.foreach循环应用 ...
通过修改MotorControl Workbench生成的程序来改变死区时间
本例程是基于MotorControl Workbench 5.2.0版本生成的HALL传感器的FOC控制程序。 程序的修改是在drive_parameters.h文件里211行处,如下图:...
vue组件中使用的一些细节点
1. 在table/ul/ol/select中显示子组件 bug 效果如下,我们会发现出现了…跑到tbody外面和table同级的情况,违反了H5的要求,即tr必须在tbody中,tbody必须在table中。: 解决 2. 子组件中的data函数 在子组件中data应该是一个函数,而不是一个对象;在根组件里data定义为一个对象; 是因为子组件也许会被调用多次,这样定义使每一个子组...
Redis进阶 -CLUSTER NODES 信息结合实际输出信息解读
文章目录 Pre cluster nodes 作用 输出格式 flags 含义 slot 第一种 单哈希槽 第二种 Range 第三种特殊状态 导入和迁移 Pre Redis进阶 - 因异常断电导致的Redis Cluster Fail故障处理 处理了redis cluster 断电后的异常,中间使用了cluster nodes 命令,我们来看下这个命令的组成 cluster nodes Redi...
