之前写的一个读身份证的逻辑。
对应界面上的步骤处理
/**
* 界面上的步骤操作
* 和硬件处理分开
*
* 这是身份信息采集页面对应的
* 身份信息采集有通用操作
* 包括身份证内容读取和输入手机号,并提交手机号
* 这里仅保留和硬件操作关联代码
*/
// ==================== 以下是测试代码 ====================
// var discernBase = function (reqUrl) {
// var _discern = {};
// // 开启监听身份证
// _discern.execute = function () {
// // 测试代码中不做任何处理,只显示身份证采集页面
// $("discern_id_card_box").show();
// setTimeout(function() {
// $("#idcard_layer").show();
// setTimeout(_discern.nextStep, 1000); // 等待 1 秒后,跳转至输入手机页面
// }, 1000); // 等待 1 秒后跳转显示身份证头像
// };
// //提交数据
// _discern.submitData = function () {
// $("#loading").show();
// setTimeout(_discern.succeed, 5000); // 5 秒后提交数据
// }
// _discern.clear = function () { };
// _discern.getBusinessNo = function () {
// return "";
// };
// return _discern;
// }
// ==================== 以上是测试代码 ====================
function step(reqUrl, isHouseHolder) {
// 身份证扫描硬件处理
// 如果需要测试,将父类替换为测试代码即可
var discern = discernBase(reqUrl, isHouseHolder);
// 步伐计数器用界面处理
var step = document.getElementById('step');
var stepProgress = step.getElementsByClassName('step-progress')[0];
var stepItem = step.getElementsByClassName('step-item');
var nextSteps = $('.next_step');
var step02BackBtn = $("#step02_back_btn");
var idCardLayer = $("#idcard_layer");
idCardLayer.hide();
// 输入手机号键盘初始化
var mphone = $("#mphone_number");
var mphoneKb = $("#mphone_number_keyboard");
var mphoneList = mphoneKb[0].children;
for (var i = 0, len = mphoneList.length - 1; i < len; i++) {
(function (item) {
item.onclick = function () {
if (mphone.val().length < 11) {
mphone.val(mphone.val() + item.innerHTML);
}
};
})(mphoneList[i]);
}
mphoneList[mphoneList.length - 1].onclick = function () {
var mphoneNum = mphone.val();
mphone.val(mphoneNum.slice(0, mphoneNum.length - 1));
};
var stepCnt = 1; // 步伐计数器
function nextStep() {
if (!!nextSteps[stepCnt]) {
nextSteps[stepCnt].onclick = nextStep;
}
// 隐藏旧外框
$("#step_0" + stepCnt++).hide();
switch (stepCnt) {
case 2:
stepProgress.style.width = '100%';
stepItem[1].className += ' step-active';
step02BackBtn.on("click", function () {
step02BackBtn.unbind('click');
stepProgress.style.width = '50%';
stepItem[1].className = 'step-item absolute_layer';
$("#step_0" + stepCnt--).hide();
});
idCardLayer.hide();
$("#step_0" + stepCnt).show();
break;
case 3:
// 校验手机号
if (!Common.Valitate.checkMphone(mphone.val())) {
DIALOG.INFO("温馨提示", "手机号格式错误!");
stepCnt--;
$("#step_0" + stepCnt).show();
return;
}
discern.submitData(); // 提交数据
break;
}
}
discern.nextStep = nextStep;
discern.showIdCardHead = function () {
idCardLayer.show();
}
discern.getMPhoneNum = function () {
return mphone.val();
}
return discern;
}