前段时间一直在研究,如何通过 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 实现 扫二维码 功能的更多相关文章

  1. Android | 教你如何开发扫二维码功能

    前言   最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...

  2. shopnc 商家中心添加打印商品二维码功能

    需求中提到需要增加每一件商品可以打印,用于线下体验店实体商品的二维码标签,客人可以根据手机扫二维码功能进行购买 任务描述: 1.如附件实现”批量打印标签“和单个商品”打印“标签功能. 2.标签有两种” ...

  3. 用vue实现扫描二维码跳转页面功能

    怎么能用vue实现扫描二维码跳转页面功能 1. 安装依赖 npm install vue-qr --save 2. <template>   <div>     <div ...

  4. Android二维码功能实现,在程序内嵌入ZXing项目

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...

  5. 网页授权——扫二维码获取openid

    最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid.这个功能主要涉及到两方面的技术:生成二维码 ...

  6. Canvas与Image互相转换示例以及利用该技术实现微信长按自动识别二维码功能

    现在扫描二维码已经很普遍,微信扫一扫即可,但是如果二维码是在自己的手机上呢?那就要用到微信里的一个功能了,手指长按二维码,会弹出自动识别的选项,点确定就可以看到二维码的内容了.那么怎么通过前端实现这个 ...

  7. Android二维码功能实现

    最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码.而内嵌二维码扫描功能的软件也越来越多,QQ.微信.UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功 ...

  8. H5实现扫描二维码功能

    为了实现H5扫描二维码功能,我在网上找到了可用的代码:https://github.com/zhiqiang21/WebComponent/tree/master/html5-Qrcode 该程序能基 ...

  9. FastReport 中添加二维码功能.(Delphi)

    http://www.cnblogs.com/fancycloud/archive/2011/07/24/2115240.html FastReport 中添加二维码功能.(Delphi)   在实际 ...

随机推荐

  1. The US in understimating Huawei, says founder Ren zhengfei

    Huawei Founder Ren Zhengfei has downplayed the impact of the US executive order that cripple Huawei' ...

  2. python爬虫入门四:BeautifulSoup库(转)

    正则表达式可以从html代码中提取我们想要的数据信息,它比较繁琐复杂,编写的时候效率不高,但我们又最好是能够学会使用正则表达式. 我在网络上发现了一篇关于写得很好的教程,如果需要使用正则表达式的话,参 ...

  3. Windows 安装 composer

    在 composer.phar 同级目录下新建文件 composer.bat : C:\bin>echo @php "%~dp0composer.phar" %*>co ...

  4. centos 7 smplayer vlc播放器

    centos7安装多媒体播放器SMPlayer 2017-03-13 21:37:14 分类: LINUX 转自:https://wiki.centos.org/TipsAndTricks/Multi ...

  5. Leetcode 407.接雨水

    接雨水 给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水. 说明: m 和 n 都是小于110的整数.每一个单位的高度都大于0 且小 ...

  6. POJ-3261 Milk Patterns,后缀数组+二分。。

                                                        Milk Patterns 题意:求可重叠的至少重复出现k次的最长的字串长. 这题的做法和上一题 ...

  7. iOS 3D UI(3D翻转)

    demo链接:http://pan.baidu.com/s/1eQVPj0m 先写个demo

  8. 【Luogu】P3381最小费用最大流模板(SPFA找增广路)

    题目链接 哈  学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...

  9. HackerRank# Stock Maximize

    原题地址 不知道为什么要用动态规划做,明明是扫几遍就行了啊 HackerRank上的题目特别喜欢long long类型啊,不用就爆.. 代码: #include <cmath> #incl ...

  10. [POJ2778]DNA Sequence(AC自动机 + DP + 矩阵优化)

    传送门 AC自动机加DP就不说了 注意到 m <= 10,所以模式串很少. 而 n 很大就需要 log 的算法,很容易想到矩阵. 但是该怎么构建? 还是矩阵 A(i,j) = ∑A(i,k) * ...