uniapp 微信小程序:扫码

这篇具有很好参考价值的文章主要介绍了uniapp 微信小程序:扫码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

测试用二维码

uniapp 小程序扫码,# uni-app,WeChat微信,uni-app,微信小程序,扫码,二维码,qrCode

1. uni.scanCode 一次一码

创建Demo项目

  1. HBuilderX 创建一个新项目,直接用默认模板
  2. 添加一个【扫码】按钮,绑上点击事件。
  3. 使用uni.scanCode 调起客户端扫码界面,扫码成功后返回对应的结果。
界面 演示
uniapp 小程序扫码,# uni-app,WeChat微信,uni-app,微信小程序,扫码,二维码,qrCode

camera 之 scanCode模式扫码

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>			
		</view>
		<view>
			<button @click="scanCodeHandler">开始扫码</button>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: '调用 uni.scanCode 实现扫码'
			}
		},
		onLoad() {},
		methods: {
			// 扫码按钮点击回调
			scanCodeHandler(){
				let that = this;
				// 调起条码扫描
				uni.scanCode({
					onlyFromCamera: true, // 是否只能从相机扫码,不允许从相册选择图片
					scanType: ['qrCode'], // 扫码类型 qrCode二维码
					autoZoom: false, 	  // 是否启用自动放大,默认启用
					success: function (res) {
						console.log(`扫码结果:${JSON.stringify(res,null,2)}`);
						that.parseQRCode(res);
					},
					fail: function (err) {
						console.log(`错误:${err}`);
					},
					complete: function (data) {
						console.log('擦屁股!');
					}
				});
			},
			// 解析二维码,处理业务
			parseQRCode(data){
				uni.vibrateShort();					// 震动提示
				uni.showToast({title: data.result})	// 弹出提示
			}
		}
	}
</script>

<style>
	/* 样式部分没动 */
</style>

扫码结果演示

扫码结果:

{
  "charSet": "utf-8",
  "scanType": "QR_CODE",
  "errMsg": "scanCode:ok",
  "result": "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!",
  "codeVersion": 8,
  "rawData": "5aSn5a625aW977yM5oiR5piv56yo56yo77yM56yo56yo55qE56yo77yM56yo56yo55qE56yo77yM6LCi6LCi77yB"
}

2. camera 之 mode=“scanCode” 连续扫码

创建 Demo

  1. HBuilderX 创建一个新项目,直接用默认模板
  2. 添加一个 camera 组件,如下调整。
    2.1. mode="scanCode" 将摄像机模式设为扫码
    2.2. @scancode="scancodeEventHandle" 扫码成功回调scancodeEventHandle 方法。
    2.3. 其它参数不赘述看文档即可。
  3. 再添加一个 view 通过样式实现一个绿色标记点。
    3.1. 通过 :style 实现动态 修改标记点位置 。
    3.2. 扫码响应中target.scanArea 值含义:[ left,top,width,height ]单位px
    注意:官方有说单位是 rpx,我调了两天,一直对不上。
界面 演示
uniapp 小程序扫码,# uni-app,WeChat微信,uni-app,微信小程序,扫码,二维码,qrCode

uni.scanCode 扫码

<template>
	<view>
		<camera device-position="back" flash="off" mode="scanCode" @scancode="scancodeEventHandle" @error="error" >
			<view class="mark" v-show="isShowMark" :style="{ left: obj.l + 'px', top: obj.t +'px' }" ></view>
		</camera>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				lockSet: {},
				obj: { l: 0, t: 0 },
				isShowMark: false
			}
		},
		onLoad(option){
			this.obj = {"l": 0,"t": 0}
		},
		methods: {
			scancodeEventHandle(res){
				let rawData = res.target.rawData;
				if(Object.hasOwn(this.lockSet, rawData) === false){
					this.lockSet[rawData] = true;
					console.log(`扫码响应结果:${JSON.stringify(res)}`);

					this.isShowMark = false; // 开始前先隐藏上一次显示的标记点
					let result = res.target.result
					
					// 震动提示
					uni.vibrateShort({	
						success: () => uni.showToast({title: result}) // 弹出提示
					});
					// 标记位置
					this.markQrCode(res.target);
										
					// 同一个码间隔几秒才会再次处理
					setTimeout(that => delete that.lockSet[rawData], 3000, this);
				}
			},
			markQrCode(target){
				// [左上角x坐标,左上角y坐标,width,height] 单位px
				let [left, top, width, height] = target.scanArea;
				let markWH = uni.upx2px(64) / 2; // mark是边长64rpx的方形,要转成 px
				// 算出显示标记的位置
				this.obj = { "l": left + width/2 - markWH, "t": top + height/2 - markWH };
				// 显示标记点
				this.isShowMark = true;
				// 无任何外力情况下,5秒后也会消失
				setTimeout(that => that.isShowMark = false, 5000, this);
			},
			error(err){
				console.log(`报错:${JSON.stringify(err)}`);
				debugger;
			}
		}
	}
</script>

<style>
	camera {
		margin: 50rpx auto;
		width: 500rpx;
		height: 500rpx;
	}
	.mark{
		position: absolute;
		width: 64rpx;
		height: 64rpx;
		background-color: #00ff00;
		border: 5px solid #f8ffeb;
		border-radius: 50%;
	}
</style>

扫码响应结果

{
  "type": "scancode",
  "target": {
	"dataset": {
	  "eventOpts": [["scancode",[["scancodeEventHandle",["$event"]]]],["error",[["error",["$event"]]]]]
	},
	"id": "",
	"offsetTop": 26,
	"offsetLeft": 66,
	"type": "qrcode",
	"result": "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!",
	"rawData": "5aSn5a625aW977yM5oiR5piv56yo56yo77yM56yo56yo55qE56yo77yM56yo56yo55qE56yo77yM6LCi6LCi77yB",
	"charSet": "utf-8",
	"scanArea": [68.094444,105.23687,84.844955,81.93183]
  },
  "currentTarget": {
	"dataset": {
	  "eventOpts": [["scancode",[["scancodeEventHandle",["$event"]]]],["error",[["error",["$event"]]]]]
	},
	"id": "",
	"offsetTop": 26,
	"offsetLeft": 66
  },
  "timeStamp": 97727,
  "detail": {
	"type": "qrcode",
	"result": "大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!",
	"rawData": "5aSn5a625aW977yM5oiR5piv56yo56yo77yM56yo56yo55qE56yo77yM56yo56yo55qE56yo77yM6LCi6LCi77yB",
	"charSet": "utf-8",
	"scanArea": [68.094444,105.23687,84.844955,81.93183]
  },
  "mp": '都是上面内容的重复,略...'
}

参考资料

  • uniapp
    uniapp:uni.scanCode(OBJECT)
    uniapp:camera

  • 微信原生
    wx.scanCode(Object object)
    微信小程序-媒体组件:camera文章来源地址https://www.toymoban.com/news/detail-714733.html

到了这里,关于uniapp 微信小程序:扫码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebStorm开发uni-app ,用vue2实现手机APP(apk) + 微信小程序多端项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月11日
    浏览(69)
  • 微信小程序uni-app

    小程序 是一种不需要下载、安装即可使用的应用,它实现了应用触手可及的梦想,用户扫一扫或者搜一下就能打开应用,也实现了用完即走的理念,用户不用安装太多应用,应用随处可用,但又无须安装卸载。 微信开发文档 1、工作原理 网页开发,渲染线程和脚本是互斥的

    2024年02月10日
    浏览(119)
  • 微信小程序授权(uni-app)

    概述 为了避免重复开发,自己封装了一个通用用户授权回调方法,只需要传入需要授权的scope,权限中文描述、回调函数,就可以实现一整套小程序是否授权、打开授权设置,调用后续操作函数的工作 功能 可以根据自己的实际应用进行微调 目前使用的uni-app版本,可以根据自

    2024年02月16日
    浏览(81)
  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(165)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(69)
  • uni-app 微信小程序 激励视频广告

    封装激励视频-Ad.js 调用上面写的方法:

    2024年02月12日
    浏览(76)
  • 【uni-app微信小程序】实现支付功能

    实现微信支付功能需要在小程序后台配置支付相关信息,并且在前端代码中调用微信支付API进行支付操作。好的, uni-app微信小程序实现支付功能整体流程 大致如下: 注册微信公众平台,并完成开发者资质认证; 在微信商户平台注册商户账号,并完成商户资质认证; 在商户

    2024年02月13日
    浏览(95)
  • uni-app(微信小程序)获取当前位置uni.getLocation

     1、微信公众平台  开发  开发管理   2、开通之后到项目文件    3、下载腾讯地图插件并引入到文件中    

    2024年02月11日
    浏览(62)
  • 微信小程序转uni-app注意事项

            如果你手头上有一套微信小程序的代码,怎样把它变成一个网页版或者app版本的呢?我推荐你使用uni-app。         使用uni-app可以很方便的将微信小程序代码翻译成uni-app项目,通过uni-app项目又可以编译成h5、app或微信小程序版本。这样一来,写一份代码同时可以

    2024年02月04日
    浏览(57)
  • 微信小程序修改原生组件样式(uni-app)

    微信小程序修改原生组件样式 全局修改,直接将修改的样式写在全局的样式文件中; 特殊情况:修改swiper指示点样式时,需要包裹在swiper的样式选择器下才生效。 直接将下列代码放在全局样式中是不会生效的,需要加上swiper组件的元素选择器或swiper组件的其他样式名也可。

    2024年02月05日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包