uni-app 自定义支付密码键盘

在这里插入图片描述
1.新建组件 payKeyboard .vue

<template>
	<view class="page-total" v-show="isShow">
		<view class="key-list">
			<view class="list" v-for="(item,index) in keyList" 
			:class="{'special':item.keyCode==190||item.keyCode==8,'payMoney':item.keyCode==88}"
			@click="onKeyList(item,index)"
			:key="item.keyCode">
				<text>{{item.key}}</text>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				isShow: false,
				keyList: [
					{
						key: 1,
						en: '',
						keyCode: 49,
					},{
						key: 2,
						en: 'ABC',
						keyCode: 50,
					},{
						key: 3,
						en: 'ABC',
						keyCode: 51,
					},{
						key: 4,
						en: 'ABC',
						keyCode: 52,
					},{
						key: 5,
						en: 'ABC',
						keyCode: 53,
					},
					
					{
						key: 6,
						en: 'ABC',
						keyCode: 54,
					},{
						key: 7,
						en: 'ABC',
						keyCode: 55,
					},{
						key: 8,
						en: 'ABC',
						keyCode: 56,
					},
					{
						key: '删除',
						en: 'Del',
						keyCode: 8,
					},
					{
						key: 9,
						en: 'ABC',
						keyCode: 57,
					},{
						key: 0,
						en: 'ABC',
						keyCode: 48,
					},{
						key: '确定',
						en: 'Pay',
						keyCode: 88,
					},
				],
				keyIndex: -1,
			};
		},
		props:{
			passwrdType: {
				type: String,
				default: 'pay'
			}
		},
		methods:{
			show(){
				this.isShow = true;
			},
			hide(){
				this.isShow = false;
			},
			/**
			 * 密码键盘按下
			 * @param {Object} item
			 * @param {Number} index
			 */
			onKeyList(item,index){
				let KeyInfo = item;	
				// 删除键
				if(KeyInfo.keyCode === 8 && this.keyIndex > -1){
					this.keyIndex--;
				}
				// 不是删除键
				if(KeyInfo.keyCode != 8){
					if(this.passwrdType == 'pay' && this.keyIndex >= 5){
						console.log('键盘');
						this.keyIndex = -1;
						return;
					}else{
						this.keyIndex = -1;
					}
					this.keyIndex++;
				}
				KeyInfo.index = this.keyIndex;
				this.$emit('KeyInfo',KeyInfo);
			}
		}
	}
</script>

<style scoped lang="scss">
	.page-total{
	position: fixed;
	left: 0;
	bottom: 0;
	width: 100%;
	z-index:99999;
	background-color: #f6f6f6;
}

.key-list{
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	padding: 1% 3%;
	height: 90%;
	margin-top: 20rpx;
	.list{
		display: flex;
		align-items: center;
		justify-content: center;
		width: 32%;
		height: 92rpx;
		background-color: #FFFFFF;
		border-radius: 10rpx;
		box-shadow: 0 0 10rpx rgba(0,0,0,0.1);
		margin-right: 1.7%;
		margin-bottom: 16rpx;
		text{
			font-size: 38rpx;
			font-weight: bold;
			color: #222222;
		}
	}
	.list:nth-child(3n){
		margin-right: 0;
	}
	.special{
		background-color: #f6f6f6;
		box-shadow: none;
		text{
			color: #959595;
		}
	}
	.payMoney{
		background:#F4CA11;
		text{
			color: #fff;
		}
	}
}
</style>

2.引用





<view cclass="page">
<view class="pay-title">
<text v-show="AffirmStatus === 1">请设置6位支付密码</text>
<text v-show="AffirmStatus >= 2">请确认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>
	<PayKeyboard ref="codeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo"></PayKeyboard >
</view>


import PayKeyboard  from "@/components/payKeyboard.vue"


const codeKeyboard = ref(null)
	const passwordArr = ref([])
	const newPasswordArr = ref("")
	const AffirmStatus = ref("")
	const passwordArr = ref([])
//支付密码
	function onPayUp() {
		codeKeyboard.value.show();
	}
	/**
	 * 支付键盘回调
	 * @param {Object} val
	 */
	function KeyInfo(val) {
		if (val.index >= 6) {
			return;
		}
		// 判断是否输入的是删除键
		if (val.keyCode === 8) {
			// 删除最后一位
			passwordArr.value.splice(val.index + 1, 1)
		}
		// 判断是否输入的是.
		else if (val.keyCode == 190) {
			// 输入.无效
		} else {
			if(passwordArr.value.length<6){
				passwordArr.value.push(val.key);
			}
		}
		if (val.keyCode == 88) {
			let pass = parseInt(passwordArr.value.join(""));
			console.log(pass)
			//点击确定的接口
			/*payPassword({
				a: pass
			}).then(res => {
				if (res.code == 200) {
				}
			})*/
		}
		// 判断是否等于6
		if (this.passwordArr.length === 6) {
			if (AffirmStatus.value === 1) {
	
				setTimeout(() => {
					passwordArr.value = [];
					AffirmStatus.value = AffirmStatus.value + 1;
					codeKeyboard..value.hide()
				}, 500)
			}
		}
		// 判断到哪一步了
		if (AffirmStatus.value === 1) {
			oldPasswordArr.value = parseInt(passwordArr.value.join(""));
		} else if (AffirmStatus.value >= 2) {
			afPasswordArr.value = parseInt(passwordArr.value.join(""));
			if (this.passwordArr.length === 6) {
			}
		}
		
		this.$forceUpdate();
	}

<style scoped lang="scss">
	.page {
		/* #ifdef H5 */
		margin-top: 44px;
		/* #endif */
		/* #ifdef APP-PLUS */
		margin-top: calc(44px + var(--status-bar-height));
		/* #endif */
		background: #fff;
	}

	.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 #999;

		.list {
			display: flex;
			align-items: center;
			justify-content: center;
			width: 16.666%;
			height: 100%;
			border-right: 2rpx solid #999;

			text {
				font-size: 32rpx;
			}
		}

		.list:nth-child(6) {
			border-right: none;
		}
	}
</style 
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uni-app支持自定义键盘的开发,可以通过uni-app提供的组件和API来实现。 首先,你可以使用`<input>`组件或者`<textarea>`组件来创建文本输入框,然后使用`@focus`事件监听输入框的获取焦点事件,例如: ```html <template> <view> <input @focus="showCustomKeyboard" placeholder="请输入内容"></input> </view> </template> <script> export default { methods: { showCustomKeyboard() { // 在这里调用自定义键盘的显示逻辑 } } } </script> ``` 接着,在`showCustomKeyboard`方法中,你可以编写逻辑来显示自定义键盘。你可以使用uni-app提供的页面跳转API来跳转到一个包含自定义键盘的新页面,或者使用遮罩层和弹窗组件来实现在当前页面显示自定义键盘的效果。 例如,你可以使用uni-app提供的弹窗组件`<popup>`来实现自定义键盘的效果: ```html <template> <view> <input @focus="showCustomKeyboard" placeholder="请输入内容"></input> <popup v-model="showKeyboard" position="bottom" :style="{ height: '300rpx' }"> <!-- 自定义键盘的内容 --> </popup> </view> </template> <script> export default { data() { return { showKeyboard: false } }, methods: { showCustomKeyboard() { this.showKeyboard = true; } } } </script> ``` 以上代码中,`<popup>`组件通过`v-model`绑定了`showKeyboard`变量,当`showKeyboard`为`true`时,弹窗组件会显示出来,从而展示自定义键盘的内容。 注意,以上只是示例代码,具体实现方式可以根据你的需求进行调整和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值