html5教程-HTML5打开手机扫码功能及优缺点

发布时间:2018-12-11 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了html5教程-HTML5打开手机扫码功能及优缺点脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。
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 结构在网页上面是有固定的显示样式,为了能够自定义按钮样式,我们可以按照下面的示例代码结构嵌套代码

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

然后设置 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 + ' ');  });  },  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 + ' ');  };  };  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);

 


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 结构在网页上面是有固定的显示样式,为了能够自定义按钮样式,我们可以按照下面的示例代码结构嵌套代码

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

然后设置 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 + ' ');  });  },  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 + ' ');  };  };  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教程,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的html5教程-HTML5打开手机扫码功能及优缺点全部内容,希望文章能够帮你解决html5教程-HTML5打开手机扫码功能及优缺点所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:CSSHTML