博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
前端Vue自定義支付密碼輸入鍵盤Keyboard和支付設置輸入框Input, 下載完整代碼請訪問uni-app插件市場地址:https://ext.dcloud.net.cn/plugin?id=13166
效果圖如下:
cc-defineKeyboard
使用方法
<!-- ref:唯一ref passwrdType:密碼樣式pay keyInfo:密碼輸入監測事件 -->
<cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo"></cc-defineKeyboard>
/** * 喚起鍵盤 */
onPayUp() {
this.$refs.CodeKeyboard.show();
},
/*** 支付鍵盤迴調* @param {Object} val */
KeyInfo(val) {
if (val.index >= 6) {
return;
}
// 判斷是否輸入的是刪除鍵
if (val.keyCode === 8) {
// 刪除最後一位
this.passwordArr.splice(val.index + 1, 1)
}
// 判斷是否輸入的是.
else if (val.keyCode == 190) {
// 輸入.無效
} else {
this.passwordArr.push(val.key);
}
uni.showModal({
title: '溫馨提示',
content: '輸入密碼是 = ' + JSON.stringify(this.passwordArr)
})
}
HTML代碼實現部分
<template>
<view class="page">
<view>
<view class="pay-title">
<text v-show="AffirmStatus === 1">請輸入6位支付密碼</text>
<text v-show="AffirmStatus === 2">請設置6位支付密碼</text>
<text v-show="AffirmStatus === 3">請確認6位支付密碼</text>
</view>
<view class="pay-password" @click="onPayUp">
<view class="list">
<text v-show="passwordArr.length >= 1">●</text>
</view>
<view class="list">
<text v-show="passwordArr.length >= 2">●</text>
</view>
<view class="list">
<text v-show="passwordArr.length >= 3">●</text>
</view>
<view class="list">
<text v-show="passwordArr.length >= 4">●</text>
</view>
<view class="list">
<text v-show="passwordArr.length >= 5">●</text>
</view>
<view class="list">
<text v-show="passwordArr.length >= 6">●</text>
</view>
</view>
<view class="hint">
<text>忘記支付密碼?</text>
</view>
</view>
<!-- ref:唯一ref passwrdType:密碼樣式pay keyInfo:密碼輸入返回事件 -->
<cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo"></cc-defineKeyboard>
</view>
</template>
<script>
export default {
components: {
},
data() {
return {
AffirmStatus: 1,
passwordArr: [],
oldPasswordArr: [],
newPasswordArr: [],
afPasswordArr: [],
};
},
onLoad() {
},
methods: {
/**
* 喚起鍵盤
*/
onPayUp() {
this.$refs.CodeKeyboard.show();
},
/**
* 支付鍵盤迴調
* @param {Object} val
*/
KeyInfo(val) {
if (val.index >= 6) {
return;
}
// 判斷是否輸入的是刪除鍵
if (val.keyCode === 8) {
// 刪除最後一位
this.passwordArr.splice(val.index + 1, 1)
}
// 判斷是否輸入的是.
else if (val.keyCode == 190) {
// 輸入.無效
} else {
this.passwordArr.push(val.key);
}
uni.showModal({
title: '溫馨提示',
content: '輸入密碼是 = ' + JSON.stringify(this.passwordArr)
})
// 判斷是否等於6
if (this.passwordArr.length === 6) {
this.passwordArr = [];
this.AffirmStatus = this.AffirmStatus + 1;
}
// 判斷到哪一步了
if (this.AffirmStatus === 1) {
this.oldPasswordArr = this.passwordArr;
} else if (this.AffirmStatus === 2) {
this.newPasswordArr = this.passwordArr;
} else if (this.AffirmStatus === 3) {
this.afPasswordArr = this.passwordArr;
} else if (this.AffirmStatus === 4) {
console.log(this.oldPasswordArr.join(''));
console.log(this.newPasswordArr.join(''));
console.log(this.afPasswordArr.join(''));
uni.showToast({
title: '修改成功',
icon: 'none'
})
setTimeout(() => {
uni.navigateBack();
}, 2000)
}
this.$forceUpdate();
}
}
}
</script>
<style scoped lang="scss">
$base: orangered; // 基礎顏色
.page {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #FFFFFF;
}
.pay-title {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 200rpx;
text {
font-size: 28rpx;
color: #555555;
}
}
.pay-password {
display: flex;
align-items: center;
width: 90%;
height: 80rpx;
margin: 20rpx auto;
border: 2rpx solid $base;
.list {
display: flex;
align-items: center;
justify-content: center;
width: 16.666%;
height: 100%;
border-right: 2rpx solid #EEEEEE;
text {
font-size: 32rpx;
}
}
.list:nth-child(6) {
border-right: none;
}
}
.hint {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100rpx;
text {
font-size: 28rpx;
color: $base;
}
}
</style>