__uniappscan.html 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <script>
  6. var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
  7. document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
  8. </script>
  9. <title>扫码</title>
  10. <style>
  11. html,
  12. body,
  13. .container {
  14. margin: 0;
  15. padding: 0;
  16. position: absolute;
  17. left: 0;
  18. top: 0;
  19. right: 0;
  20. bottom: 0;
  21. background: #000000;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div id="scan" class="container">
  27. </div>
  28. <script>
  29. var scan;
  30. var lightImg;
  31. var lightView;
  32. var back = function () {
  33. lightImg && lightImg.clear();
  34. lightView && lightView.clear();
  35. scan && scan.close();
  36. var webview = plus.webview.currentWebview();
  37. if (webview.__uniapp_dark) {
  38. plus.navigator.setStatusBarStyle('dark');
  39. }
  40. webview.close('auto');
  41. }
  42. /**
  43. * 绘制照亮开关
  44. */
  45. function drawLight() {
  46. var offImg =
  47. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABjklEQVRoQ+1ZbVHEQAx9TwE4ABTcOQAknANQAKcAUAAOAAXgAHAACsDCKQiTmbYDzJZtNt2bFrJ/m6+Xl2yyU2LmhzOPH/8PgIjcADirxNyapNoffMwMiMgzgMPBHmyCLySPLCoBwJKtAbJbYaBmD1yRvBwAtBMxl5DF+DZkiwCIyBLAzsgBbki+Wm2WAlCaL6zOMvKnJO+sNksB7ALQbO1ZHfbIv5FUVs2nCIB6EZETALdmj2mFY5I6X8ynGEADQllYmL1+VzBfnV/VvQB0aj45ARyQ/Ci14QLQsOBZLe5JaikWnzEA7AN4L4hgA2Dpyb76dANwsOCq/TZhASAYKGie0a7R1lDPI0ebtF0NUi+4yfdAtxr3PEMnD6BbD0QkNfACQO05EAwMuaBqDrIVycdmTpwDuP4R0OR7QFftVRP0g+49cwOQq4DJMxAAchmofY3m/EcJBQOZbTRKKJeBKKEoIePvpFRJ1VzmciUccyCa+C81cerBkuuB7sGTE/zt+yhN7AnAqxsAvBn06n8CkyPwMZKwm+UAAAAASUVORK5CYII=';
  48. var onImg =
  49. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAB4klEQVRoQ+1ZQU7CUBCdaWVBLFETqUtxB7iQG4hH4AZ4AvUE4gnkBuoJ9AbiDXAhZadby4IQICaS9psqJBVLy5/fkhKHbefPzPvzZv6bgLDmP1zz/OH/ARjZpSYAniVSORQXRt5qyviWrsDQLrUQ8FgmyLK2AsRTzrSqy9p7dgxA5raibFdSgSR7QAi4yu11GlFA/d+lKSTjfBW2JAAj+7Cio7MVZ4KO0AeG+dKW9UkCMHwvNxDhUjZYuL17apjdW1mfJACiX9gef2bbgLgvG3CB/bNhdioUXyQAXqCRXawDaDeUoPNnBLonuXy3RfFFBvADouxx9ogSeHaGMjpjm0LDXrGKQntUAaBn3IPsTveN6kOpAl5QNWkh7gzTqlOTJ0mJ+WAf/WLBmWivskkIEIONjKio3H4sAKhVUOX+7MKUKcQAZLk3Z88VWEQhr0kRYCoN/m5wqe8BvzQOkuDpB+CTB0EPHgOYNnNiTewXaFyBkFGbWAVQE7XNXevhW7X2Sucg8NqfR+p7AADaesateUk7E+0eAH4tLOsAIPSNZQBJT6EoicMV4Ar4OEJZK5lCTCGmkPy/MUGjOTEtxO9A1A1wE3MTp6iJgxaWKAr7F54o27DvsUwhlQRUzzIA1RtUPf8FRKRYQOI+9hQAAAAASUVORK5CYII=';
  50. var onText = '轻触照亮';
  51. var offText = '轻触关闭';
  52. var on = false;
  53. var viewWidth = 48;
  54. var fontSize = 12;
  55. var imgWidth = 30;
  56. function changeType() {
  57. lightView.reset();
  58. lightImg.loadBase64Data(on ? onImg : offImg, function () {
  59. lightView.drawBitmap(lightImg, {}, {
  60. top: 0,
  61. left: (viewWidth - imgWidth) / 2 + 'px',
  62. width: imgWidth + 'px',
  63. height: imgWidth + 'px'
  64. });
  65. });
  66. lightView.drawText(on ? offText : onText, {
  67. top: imgWidth + 'px',
  68. left: '0px',
  69. width: '100%',
  70. height: fontSize + 'px'
  71. }, {
  72. color: '#ffffff',
  73. size: fontSize + 'px'
  74. });
  75. scan.setFlash(on);
  76. on = !on;
  77. }
  78. lightImg = new plus.nativeObj.Bitmap('lightImg');
  79. lightView = new plus.nativeObj.View('lightView', {
  80. width: viewWidth + 'px',
  81. height: viewWidth + 'px',
  82. top: window.innerHeight / 2 + 50 + 'px',
  83. left: (window.innerWidth - viewWidth) / 2 + 'px',
  84. position: 'static'
  85. });
  86. lightView.addEventListener('click', function () {
  87. changeType();
  88. });
  89. plus.webview.currentWebview().append(lightView);
  90. changeType();
  91. }
  92. document.addEventListener('plusready', function () {
  93. var serviceWebview = plus.webview.getWebviewById('__W2A_CONTEXT_') || plus.webview.getLaunchWebview();
  94. plus.key.addEventListener('backbutton', back);
  95. setTimeout(function () {
  96. var webview = plus.webview.currentWebview();
  97. scan = new plus.barcode.Barcode('scan', webview.__uniapp_scan_type, {
  98. frameColor: '#118CE9',
  99. scanbarColor: '#118CE9'
  100. });
  101. scan.onmarked = function (type, code, file) {
  102. var res = {
  103. type: type,
  104. code: code
  105. };
  106. back()
  107. serviceWebview.evalJS('window.__scanCodeCallback__&&__scanCodeCallback__(' +
  108. JSON.stringify(res) + ')');
  109. };
  110. scan.onerror = function (error) {
  111. back()
  112. serviceWebview.evalJS(
  113. 'window.__scanCodeCallback__&&__scanCodeCallback__(false)');
  114. };
  115. scan.start();
  116. drawLight();
  117. }, 500)
  118. })
  119. </script>
  120. </body>
  121. </html>