首頁 > web前端 > H5教程 > 主體

H5製作二維碼掃描解析的程式碼實例

Y2J
發布: 2017-05-24 11:58:59
原創
8420 人瀏覽過

這篇文章主要介紹了Html5實現二維碼掃描並解析的相關資料,需要的朋友可以參考下

引子:
最近公司專案有個需求,微博客戶端中, h5 的頁面上的某個按鈕能夠與native 互動呼起鏡頭,掃描二維碼並且解析。在非微博客戶端(微信或原生瀏覽器,如:safari)呼起系統的拍照或上傳圖片按鈕,透過拍照或上傳圖片解析二維碼。
第二種方案需要在前端 js 解析二維碼。這樣依賴一個第三方的解析函式庫jsqrcode。這個函式庫已經支援在瀏覽器端呼起相機的操作了,但依賴一個叫getUserMedia的屬性。該屬性行動端的瀏覽器支援的都不是很好,所以只能間接的上傳圖片的方式解析二維碼。
getUserMedia屬性相容瀏覽器清單:

#首先感謝jsqrcode 的開發者,提供這麼優秀的解析二維碼的程式碼,為我減少了很大的工作量。 jsqrcode 位址:點我
我的程式碼庫位址:點我
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 樣式
因為插件需要使用file" /> ,該html 結構在網頁上面是有固定的顯示樣式,為了能夠自訂按鈕樣式,我們可以按照下面的範例程式碼結構嵌套程式碼

程式碼如下:

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


然後設定input 按鈕的css 隱藏按鈕,例如我使用的是屬性選擇器

程式碼如下:

input[node-type=jsbridge]{ 
visibility
: hidden; 
}
登入後複製


這裡我們只需要依照自己的需求定義class="qr-btn"的樣式即可。
3.在頁面上初始化Qrcode 物件 

程式碼如下:

//初始化扫描二维码按钮,传入自定义的 node-type 属性 
$(function() { 
Qrcode.init($(&#39;[node-type=jsbridge]&#39;)); 
});
登入後複製

主要程式碼解析

程式碼如下:

(function($) { 
var Qrcode = function(tempBtn) { 
//该对象只支持微博域下的解析,也就是说不是微博域下的页面只能用第二种方案解析二维码 
if
 (window.WeiboJSBridge) { 
$(tempBtn).on(&#39;click&#39;, this.weiBoBridge); 
} 
else
 { 
$(tempBtn).on(&#39;change&#39;, this.getImgFile); 
} 
}; 
Qrcode.prototype = { 
weiBoBridge: function() { 
WeiboJSBridge.invoke(&#39;scanQRCode&#39;, 
null
, function(params) { 
//得到扫码的结果 
location.href=params.result; 
}); 
}, 
getImgFile: function() { 
var _this_ = this; 
var imgFile = $(this)[0].files; 
var oFile = imgFile[0]; 
var o
FRead
er = 
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\-any
map
|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.c
all
back = function(data) { 
//得到扫码的结果 
location.href = data; 
}; 
}; 
oFReader.readAsDataURL(oFile); 
}, 
destory: function() { 
$(tempBtn).off(&#39;click&#39;); 
} 
}; 
//初始化 
Qrcode.init = function(tempBtn) { 
var _this_ = this; 
var inputDom; 
tempBtn.
each
(function() { 
new _this_($(this)); 
}); 
$(&#39;[node-type=qr-btn]&#39;).on(&#39;click&#39;, function() { 
$(this).find(&#39;[node-type=jsbridge]&#39;)[0].click(); 
}); 
}; 
window.Qrcode = Qrcode; 
})(window.Zepto ? Zepto : jQuery);
登入後複製


範例展示
1.呼起前面的頁面

##2.呼起後的頁面

【相關推薦】

1. 

Html5免費影片教學

2. 

H5完成多重圖片上傳的實例詳解

3. 

詳解H5的自訂屬性data-*

4 . 

教你如何實作一個H5微場景

5. 

HTML5本地資料庫實例詳解

以上是H5製作二維碼掃描解析的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!