vue 实现 扫二维码 功能
前段时间一直在研究,如何通过 vue 调用 相机 实现 扫一扫的功能,但是查看文档发现,需要获取 getUserMedia 的属性值,但存在兼容性问题。
退而求其次,通过 h5plus 来实现。
1.QrScanner.vue
<!-- 扫描二维码 20180109 -->
<template>
<div>
<!-- 内容部分 -->
<video id="qr-vedio" class="v" autoplay=""></video>
<canvas id="qr-canvas" width="800" height="600" style="width: 800px; height: 600px;display:none;"></canvas>
<p v-show="result != ''">{{result}}</p>
<p v-show="errorMes != ''">{{errorMes}}</p>
</div>
</template> <script>
export default {
props: {
//
},
data () {
return {
vedio: '',
canvas: '',
context: '',
stopScan: null,
errorMes: '',
result: ''
}
},
mounted(){
console.log(1);
var _that = this;
window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; this.vedio = document.getElementById('qr-vedio');
this.canvas = document.getElementById('qr-canvas');
this.context = this.canvas.getContext('2d'); console.log(2);
// Call the getUserMedia method with our callback functions
if (navigator.getUserMedia) {
console.log(3);
var videoSource = [];
navigator.mediaDevices.enumerateDevices().then((function (sourceInfos) {
var i;
for (i = 0; i != sourceInfos.length; ++i) {
var sourceInfo = sourceInfos[i];
if (sourceInfo.kind === 'videoinput' && sourceInfo.label.indexOf('back') != -1) {
videoSource.push(sourceInfo.deviceId);
}
}
var successCallback = function (stream) {
_that.vedio.src = (window.URL && window.URL.createObjectURL(stream)) || stream;
window.localMediaStream = stream;
_that.vedio.addEventListener("loadstart", function () {
_that.vedio.play();
}, false);
_that.stopScan = setInterval(_that.scan, 500);
} navigator.getUserMedia({
video: {
optional: [{ sourceId: videoSource[0] }]
}
}, successCallback, function (e) {
console.log(e);
});
})); } else {
this.errorMes = 'Native web camera streaming (getUserMedia) not supported in this browser.';
} qrcode.callback = function (data) {
_that.result = data;
console.log(data)
if (window.localMediaStream && window.localMediaStream.stop) {
window.localMediaStream.stop();
}
if (_that.stopScan) {
clearInterval(_that.stopScan);
}
};
},
methods: {
scan() {
if (window.localMediaStream) {
this.context.drawImage(this.vedio, 0, 0, 100, 100);
}
try {
qrcode.decode();
} catch (e) {
console.log('decode has error');
}
}
}
}
</script> <style lang="less" scoped>
.v {
width: 320px;
height: 240px;
} #qr-canvas {
width: 800px;
height: 800px;
}
</style>
2.效果图
vue 实现 扫二维码 功能的更多相关文章
- Android | 教你如何开发扫二维码功能
前言 最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...
- shopnc 商家中心添加打印商品二维码功能
需求中提到需要增加每一件商品可以打印,用于线下体验店实体商品的二维码标签,客人可以根据手机扫二维码功能进行购买 任务描述: 1.如附件实现”批量打印标签“和单个商品”打印“标签功能. 2.标签有两种” ...
- 用vue实现扫描二维码跳转页面功能
怎么能用vue实现扫描二维码跳转页面功能 1. 安装依赖 npm install vue-qr --save 2. <template> <div> <div ...
- Android二维码功能实现,在程序内嵌入ZXing项目
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...
- 网页授权——扫二维码获取openid
最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid.这个功能主要涉及到两方面的技术:生成二维码 ...
- Canvas与Image互相转换示例以及利用该技术实现微信长按自动识别二维码功能
现在扫描二维码已经很普遍,微信扫一扫即可,但是如果二维码是在自己的手机上呢?那就要用到微信里的一个功能了,手指长按二维码,会弹出自动识别的选项,点确定就可以看到二维码的内容了.那么怎么通过前端实现这个 ...
- Android二维码功能实现
最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码.而内嵌二维码扫描功能的软件也越来越多,QQ.微信.UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功 ...
- H5实现扫描二维码功能
为了实现H5扫描二维码功能,我在网上找到了可用的代码:https://github.com/zhiqiang21/WebComponent/tree/master/html5-Qrcode 该程序能基 ...
- FastReport 中添加二维码功能.(Delphi)
http://www.cnblogs.com/fancycloud/archive/2011/07/24/2115240.html FastReport 中添加二维码功能.(Delphi) 在实际 ...
随机推荐
- BIOM Table-codes
import numpy from biom.table import Table ========================================================== ...
- 剑指Offer(书):反转链表
题目:输入一个链表,反转链表后,输出新链表的表头. 分析:要分清他的前一个节点和后一个节点,开始的时候前节点为null,后节点为head.next,之后,反转. public ListNode Rev ...
- eval() 函数 解析json对象
eval在js中用来运行以js源码组成的字符串. 可以用来改变全局或者局部变量,例如: var globalEval = eval; //定义全局eval函数别名 var a ='global', b ...
- 【javascript面试题】5个经典的面试题
问题1: 作用域 看一下下面的代码: (function(){ var a = b =5; })(); console.log(b); 结果会输出什么? 答案: 5 这个问题考查的要点是两个不同的作用 ...
- 鼠标移动或者鼠标点击div消失不见排查
点击事件,导致某div或者容器样式隐藏,如果不能直接发现click事件绑定,那么首先排查哪些方法在控制div的样式, 然后看一看哪些方法在调用修改样式的方法. 然后再排查什么在调用修改样式的方法的方法 ...
- 九度oj 题目1536:树的最小高度
题目描述: 给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度. 输入: 输入可能包含多个测试案例. 对于每个测试案 ...
- 【Luogu】P2953牛的数字游戏(博弈论)
题目链接 自己乱搞……然后一遍AC啦! 思路从基本的必胜态和必败态开始分析.我们把减去最大数得到的数叫作Max,减去最小数得到的数叫作Min. 那么开始分析. 一.0是必败态. 这个没法解释.题目就这 ...
- Python GUI 之 Treeview 学习
例子1 from tkinter import *import tkinter.ttk as ttk win = Tk()win.title("Treeview 学习") col ...
- POJ 2155 Matrix【二维线段树】
题目大意:给你一个全是0的N*N矩阵,每次有两种操作:1将矩阵中一个子矩阵置反,2.查询某个点是0还是1 思路:裸的二维线段树 #include<iostream>#include< ...
- Fragment的广播消息接收
这种方式不用在配置文件加东西 广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里. LocalBroadcastManager ...