二维码扫描功能的实现[自定义扫描样式]

2018-01-23 21:39 更新

作者: 至高吾尚

概述

很多APP应用中会用到二维码扫描功能,对于APP开发者来说,有时会遇到客户对二维码扫描页面的样式有所要求,本文讲述如何使用APICloud 模块技术进行二维码扫描功能的开发。本文提供两种二维码实现方式,一种是使用FNScanner模块封装好的二维码扫描页面,另一种是使用HTML代码自定义扫描页面的样式。

可在GitHub上下载本项目DEMO源码 URL地址:https://github.com/IT-SDJ/QRCodeDEMO

开发流程

  • APICloud 的控制台新建一个Native应用

FNScanner 模块是一个二维码/条形码扫描器。在 iOS 平台上本模块底层集成了系统自带扫码功能。

  • 下载代码到本地

  • 编写二维码功能代码

  • 同步代码到云端

  • 云编译

  • 扫描二维码安装APP,体验开发效果

二维码功能核心代码

二维码功能主页面代码

  1. 开启应用进入后台和恢复前台的监听逻辑,防止进入后台出现显示错误

  1. var FNScanner; // 二维码模块对象
  2. apiready = function() {
  3. var eHeader = $api.byId('header');
  4. $api.fixStatusBar(eHeader); // 顶部header的沉浸式修复
  5. FNScanner = api.require('FNScanner');
  6. api.addEventListener({ // 通知当前本模块app进入后台。此时模块会进行一些资源的暂停存储操作,防止照相机回来之后黑屏
  7. name:'pause'
  8. }, function(ret, err){
  9. FNScanner.onPause();
  10. });
  11. api.addEventListener({ //通知当前本模块app进入回到前台。此时模块会进行一些资源的恢复操作,防止照相机回来之后黑屏
  12. name:'resume'
  13. }, function(ret, err){
  14. FNScanner.onResume();
  15. });
  16. };

  1. 初始化FNScanner模块

  • 如果是使用FNScanner模块封装的扫描方式

    1. function fnOpenNormalQRCode() { // 打开默认的二维码模块
    2. FNScanner.openScanner({
    3. autorotation: true
    4. }, function(ret, err) {
    5. if (ret) {
    6. if(ret.eventType == "success") { // 模块扫描成功事件
    7. api.alert({
    8. title: '扫描结果',
    9. msg: ret.content,
    10. }, function(ret, err){

}); } } else { alert(JSON.stringify(err)); } }); }

  1. - 如果是使用自定义样式的扫描页面

function fnOpenCustomQRCode() { // 打开自定义样式的二维码功能模块

FNScanner.openView({ // 打开二维码页面 rect: { //扫描器的位置及尺寸,在安卓平台宽高比须跟屏幕宽高比一致,否则摄像头可视区域的图像可能出现少许变形;w和h属性最好使用api.winWidth和api.winHeight,这样不会导致变形,也不会出现手机必须要在一定的距离上才能扫描出来的现象 x: 0, y: 0, w: 'auto', h: 'auto' }, rectOfInterest: { // (可选项)在扫码区域上的扫码识别区域,仅在iOS平台有效 x: (api.winWidth-250)/2, y: (api.winHeight-250)/2, w: 250, h: 250 }, sound: 'widget://res/qrcode.wav' // 自定义设置扫描后的声音 }, function(ret, err) { if (ret) { if ('show' == ret.eventType) { //模块加载展现事件

} else if(ret.eventType == "success") { // 模块扫描成功事件 fnCloseCustomQRCode();

api.alert({ title: '扫描结果', msg: ret.content, }, function(ret, err){

});

} else { alert(JSON.stringify(err)); } } })

//调用打开自定义的frame页面方法 setTimeout(function(){ fnOpenSubFrame(); },500); }

  1. 3. 打开二维码自定义样式的 Frame页面的方法
  1. function fnOpenSubFrame() { // 打开二维码自定义的frame样式框页面
  2. api.openFrame({
  3. name: 'qrcode_frm',
  4. url: './html/qrcode_frm.html',
  5. rect: { // 采用 margin相对布局
  6. marginTop: 0,
  7. h: 'auto',
  8. w: 'auto'
  9. },
  10. bounces: false,
  11. bgColor: 'rgba(0,0,0,0)',
  12. });
  13. }
  14. ```
  1. 关闭自定义页面的方法封装

  1. function fnOpenSubFrame() { // 打开二维码自定义的frame样式框页面
  2. api.openFrame({
  3. name: 'qrcode_frm',
  4. url: './html/qrcode_frm.html',
  5. rect: { // 采用 margin相对布局
  6. marginTop: 0,
  7. h: 'auto',
  8. w: 'auto'
  9. },
  10. bounces: false,
  11. bgColor: 'rgba(0,0,0,0)',
  12. });
  13. }
  1. 二维码自定义样式的 Frame页面的相关代码 使用HTML+CSS+JS 开发一个带自动上下移动横线的扫描方框

  • CSS 样式代码

  1. <style>
  2. html,
  3. body {
  4. height: 100%;
  5. background-color: rgba(0,0,0,0);
  6. }
  7. .qrcode-box {
  8. width: 250px;
  9. height: 250px;
  10. position: absolute;
  11. }
  12. .qrcode-box:after {
  13. -webkit-animation: rotateAnim linear 3.68s infinite;
  14. animation: rotateAnim linear 3.68s infinite;
  15. content: '';
  16. position: absolute;
  17. display: block;
  18. width: 100%;
  19. height: 2px;
  20. background-color: #d8be26;
  21. }
  22. /*二维码上下移动的扫描横线*/
  23. @keyframes rotateAnim {
  24. from {
  25. top: 0;
  26. }
  27. to {
  28. top: 100%;
  29. }
  30. }
  31. @-webkit-keyframes rotateAnim {
  32. from {
  33. top: 0;
  34. }
  35. to {
  36. top: 100%;
  37. }
  38. }
  39. /*二维码扫描框的四角*/
  40. .qrcode-box span {
  41. width: 14px;
  42. height: 14px;
  43. position: absolute;
  44. border: 2px solid #1fa2ff;
  45. }
  46. .qrcode-box span:nth-child( 1) {
  47. left: 0;
  48. top: 0;
  49. border-width: 2px 0 0 2px;
  50. }
  51. .qrcode-box span:nth-child( 2) {
  52. right: 0;
  53. top: 0;
  54. border-width: 2px 2px 0 0;
  55. }
  56. .qrcode-box span:nth-child( 3) {
  57. right: 0;
  58. bottom: 0;
  59. border-width: 0 2px 2px 0;
  60. }
  61. .qrcode-box span:nth-child( 4) {
  62. left: 0;
  63. bottom: 0;
  64. border-width: 0 0 2px 2px;
  65. }
  66. </style>

  • HTML Body部分代码

  1. <body>
  2. <!-- 二维码扫描框 -->
  3. <div id="qrcode-box" class="qrcode-box">
  4. <span></span>
  5. <span></span>
  6. <span></span>
  7. <span></span>
  8. </div>
  9. </body>
  1. JavaScript部分定位扫描方框元素位置的代码

  1. <script type="text/javascript">
  2. apiready = function() {
  3. fnShowQRScannerBox();
  4. }
  5. function fnShowQRScannerBox() { // 根据屏幕实际宽度修正二维码扫描框的位置并加载显示
  6. var eQRCodeBox = $api.byId('qrcode-box');
  7. var top = (api.winHeight - 250)/2;
  8. var left = (api.winWidth - 250)/2;
  9. $api.css(eQRCodeBox, 'top: '+top+'px;left:'+left+'px;display:block;');
  10. }
  11. </script>
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号