未加星标

HTML5打开手机扫码功能及优缺点

字体大小 | |
[前端(html5) 所属分类 前端(html5) | 发布者 店小二03 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

1.解决的问题:

1.能够在微博客户端呼起摄像头扫描二维码并且解析;

2.能够在原生浏览器和微信客户端中扫描二维码并且解析;

2.优点:

web端或者是 h5端可以直接完成扫码的工作;

3.缺点:

图片不清晰很容易解析失败(拍照扫描图片需要镜头离二维码的距离很近),相对于 native 呼起的摄像头解析会有1-2秒的延时。

说明:

此插件需要配合zepto.js 或者 jQuery.js使用

使用方法:

1.在需要使用的页面按照下面顺序引入lib目录下的 js 文件

<script src="lib/zepto.js"></script>
<script src="lib/qrcode.lib.min.js"></script>
<script src="lib/qrcode.js"></script>

2.自定义按钮的 html 样式

为自定义的按钮添加自定义属性,属性名称为node-type

为 input 按钮添加自定义的属性, 属性名称为node-type

因为该插件需要使用<input type="file" /> ,该 html 结构在网页上面是有固定的显示样式,为了能够自定义按钮样式,我们可以按照下面的示例代码结构嵌套代码

<div>
<div class="qr-btn" node-type="qr-btn">扫描二维码1<input node-type="jsbridge" type="file" name="myPhoto" value="扫描二维码1" />
</div>
</div>

然后设置 input 按钮的 css 隐藏按钮,比如我使用的是属性选择器

input[node-type=jsbridge]{
display:none;
}

这里我们只需要按照自己的需要定义class="qr-btn"的样式即可。

3.在页面上初始化 Qrcode 对象

//初始化扫描二维码按钮,传入自定义的 node-type 属性
$(function() {
Qrcode.init($('[node-type=qr-btn]'));
});

主要代码解析

(function($) {
var Qrcode = function(tempBtn) {
var _this_ = this;
var isWeiboWebView = /__weibo__/.test(navigator.userAgent);
if (isWeiboWebView) {if (window.WeiboJSBridge) { _this_.bridgeReady(tempBtn);} else { document.addEventListener('WeiboJSBridgeReady', function() { _this_.bridgeReady(tempBtn); });}
} else {_this_.nativeReady(tempBtn);
}
};
Qrcode.prototype = {
nativeReady: function(tempBtn) {$('[node-type=jsbridge]',tempBtn).on('click',function(e){ e.stopPropagation();});$(tempBtn).bind('click',function(e){ $(this).find('input[node-type=jsbridge]').trigger('click');});$(tempBtn).bind('change', this.getImgFile);
},
bridgeReady: function(tempBtn) {$(tempBtn).bind('click', this.weiBoBridge);
},
weiBoBridge: function() {window.WeiboJSBridge.invoke('scanQRCode', null, function(params) { //得到扫码的结果 $('.result-qrcode').append(params.result + '<br/>');});
},
getImgFile: function() {var _this_ = this;var inputDom = $(this).find('input[node-type=jsbridge]');var imgFile = inputDom[0].files;var oFile = imgFile[0];var oFReader = new FileReader();var rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;if (imgFile.length === 0) { return;}if (!rFilter.test(oFile.type)) { alert("选择正确的图片格式!"); return;}oFReader.onload = function(oFREvent) { qrcode.decode(oFREvent.target.result); qrcode.callback = function(data) { //得到扫码的结果 $('.result-qrcode').append(data + '<br/>'); };};oFReader.readAsDataURL(oFile);
},
destory: function() {$(tempBtn).off('click');
}
};
Qrcode.init = function(tempBtn) {
var _this_ = this;
tempBtn.each(function() {new _this_($(this));
});
};
window.Qrcode = Qrcode;
})(window.Zepto ? Zepto : jQuery);

总结

以上所述是小编给大家介绍的html5打开手机扫码功能及优缺点,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

tags: image,function,gt,lt,type,tempBtn,var,node,input,Qrcode,qrcode,script,js,jsbridge
分页:12
转载请注明
本文标题:HTML5打开手机扫码功能及优缺点
本站链接:http://www.codesec.net/view/569659.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(html5) | 评论(0) | 阅读(15)