uniapp——获取验证码倒计时功能

文章描述了一个基于Vue.js的表单组件,包含手机号和验证码输入框,带有倒计时功能。用户在输入手机号后可点击按钮获取验证码,同时进行前端验证,确保输入正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
    <view class="get-phone-box">
		<view class="main">
			<view class="item-wrap cy-flex">
				<text class="label">手机号</text>
				<input class="input" type="number" placeholder="请输入手机号" v-model="formData.phone" maxlength="11" />
			</view>
			<view class="item-wrap cy-flex">
				<text class="label">验证码</text>
				<input class="input" type="number" placeholder="请输入验证码" v-model="formData.vercode" maxlength="6" />
				<button class="send" @click="sendMobileCode" :disabled="counting">{{ counting ? `${count}秒后重新获取` : '获取验证码' }}</button>
			</view>
			<button type="default" class="save-btn" @click="checkCode" :disabled="isDisabled">确定</button>
		</view>
	</view>
</template>
<script>
    export default {
        data() {
			return {
				count: 60, // 倒计时时长,单位为秒
				counting: false, // 是否正在倒计时
				
				formData: {
					phone: '',
					vercode: ''
				}
				
			}
		},
      methed:{
        // 发送手机动态码
		sendMobileCode() {
			if (this.counting) return;
			var reg = /^1[3456789]\d{9}$/;
			if (!reg.test(this.formData.phone)) {
				uni.showToast({
					title: '请输入正确的手机格式',
					icon: 'none'
				})
				return
			}
			this.counting = true;
			const timer = setInterval(() => {
				this.count--;
				if (this.count <= 0) {
					clearInterval(timer);
					this.counting = false;
					this.count = 60; // 重置倒计时时长
				}
			}, 1000);
			this.getCaptcha()
		},
        // 获取验证码的接口
		async getCaptcha() {
			try {
				let res = await sendNumberCode({ //调用后台接口,把参数传给后台
					phone: this.formData.phone,
					type: 1
				});
				if (res.code == 0) { //调用成功之后的操作
					uni.showToast({
						title: res.data,
						icon: 'none'
					})
				}
			} catch (err) {
				console.log(err);
				//TODO handle the exception
			}
		}
     }
  }
</script>

### 实现 UniApp 获取短信验证码功能UniApp 中实现获取短信验证码功能涉及前端页面设计、发送请求到服务器以及处理响应逻辑。为了确保安全性和用户体验,通常会加入倒计时机制来防止频繁点击。 #### 前端部分:创建按钮并设置定时器 通过 Vue.js 的生命周期钩子 `mounted` 来初始化数据,在模板内定义一个按钮用于触发发送验证码操作,并利用计算属性或方法控制按钮状态和显示文字变化[^1]: ```html <template> <view class="container"> <!-- 验证码输入框 --> <input v-model="phone" placeholder="请输入手机号"/> <!-- 发送验证码按钮 --> <button :disabled="isCountingDown" @click="sendCode">{{ buttonText }}</button> <!-- 输入验证码区域 --> <input v-if="hasSentCode" v-model="codeInput" placeholder="请输入收到的验证码"/> <!-- 提交表单按钮 --> <button v-if="hasSentCode && codeInput.length === 6">提交</button> </view> </template> <script> export default { data() { return { phone: '', hasSentCode: false, isCountingDown: false, countdownTime: 60, // 设置为实际需求的时间长度 timerId: null, codeInput: '' } }, computed: { buttonText() { if (this.isCountingDown) { return `${this.countdownTime}秒后重新获取`; } else { return '获取验证码'; } } }, methods: { sendCode() { this.hasSentCode = true; uni.request({ url: '/api/send-sms-code', // 替换成真实的API地址 method: 'POST', data: { phoneNumber: this.phone }, // 将电话号码作为参数传递给服务端 success(res) { console.log('成功:', res); let remainingSeconds = this.countdownTime; this.timerId = setInterval(() => { if (--remainingSeconds <= 0) { clearInterval(this.timerId); this.isCountingDown = false; this.countdownTime = 60; // 重置时间 } else { this.countdownTime = remainingSeconds; this.isCountingDown = true; } }, 1000); }.bind(this), fail(err) { console.error('失败:', err); } }); } } } </script> ``` 此段代码展示了如何构建一个简单的界面让用户可以输入手机号并通过点击按钮发起获取验证码的操作。当用户点击“获取验证码”之后,程序将会调用 API 请求向指定手机发送一条包含随机生成的一次性密码的消息;与此同时启动一个六十秒钟的倒数计时器阻止再次快速点击该按钮直到超时期满为止。 #### 后端部分:集成 Django 和 django-simple-captcha 库 对于后端而言,则需搭建 RESTful Web Service 并集成了像 django-rest-framework 这样的框架以便更好地管理路由与视图函数之间的映射关系。另外还需要安装第三方库如 django-simple-captcha 或其他类似的工具包用来生产唯一的六位数字串作为临时验证依据。 请注意上述仅为概念性的指导说明而非完整的项目源文件列表——具体实施细节取决于个人开发环境配置和技术栈偏好等因素影响下所作出的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值