转自:https://blog.csdn.net/qq_41630218/java/article/details/84570027
因为要做一个60s倒计时的功能,查找以后发现这个方法基本功能都可以满足,记录一下。
wxml页面
<view class="all"> <!-- 手机 --> <view class="tel"> <!-- 手机图标 --> <view class="icon_tel"> <image class="tel_image" src="https://image.flaticon.com/icons/svg/660/660439.svg"></image> <text class="tel_words">手机</text> </view> <!-- 内容 --> <view class="content_tel"> <view class="adress"> <text>+86</text> </view> <view class="sign"> <text>▼</text> </view> <view> <input class="input_tel" placeholder="请输入手机号" focus="{{focus}}" value="{{tel}}" bindinput="watchTel"/> </view> </view> <!-- 下划线 --> <view class="line_adress"></view> <view class="line_input"></view> </view> <!-- 验证码 --> <view class="VerificationCode "> <!-- 验证码图标 --> <view class="icon_VerificationCode"> <image class="tel_image" src="https://image.flaticon.com/icons/png/128/179/179640.png"></image> <text class="tel_words">验证码</text> </view> <!-- 内容 --> <view class="content_VerificationCode"> <view> <input class="input_VerificationCode" placeholder="请输入验证码" focus="{{focus}}" value="{{VerificationCode}}" bindinput="watchVerificationCode"/> </view> </view> <!-- 点击获取验证码 --> <view> <button class="button_VerificationCode" size="mini" style="background-color:{{color}}" disabled="{{disabled}}" bindtap="bindButtonTap"> <view class="world"> <text class="button_world">{{text}}</text> </view> </button> </view> <!-- 下划线 --> <view class="line_VerificationCode"></view> </view> <!-- 提交按钮 --> <view> <button class="button_submission" type="primary" size="default" bindtap="ChangeTel"> <text class="button_submissionWorld">提交</text> </button> </view>
js:
var qcloud = require(\'../../vendor/wafer2-client-sdk/index\') var config = require(\'../../config\') var util = require(\'../../utils/util.js\') Page({ data: { VerificationCode: \'\', text:\'获取验证码\',//按钮文字 currentTime: 61, //倒计时 disabled: false, //按钮是否禁用 tel: \'\' //获取到的手机栏中的值 }, // 手机号监听输入 watchTel: function (event) { console.log(event); this.data.tel = event.detail.value this.setData({ tel: event.detail.value }) }, // 验证码监听输入 watchVerificationCode: function (event) { console.log(event); this.data.VerificationCode = event.detail.value this.setData({ VerificationCode: event.detail.value }) }, //提交修改密码表单 ChangeTel: function () { var that = this if (this.data.VerificationCode != 10086) { wx.showToast({ icon: \'none\', title: \'验证码输入错误!\' }) } else { util.showBusy(\'请求中...\') that.data.userpwd = that.data.renewpwd qcloud.request({ url: `${config.service.host}/weapp/UserChangeTel`, header: { \'content-type\': \'application/x-www-form-urlencoded\' }, method: "POST", data: { tel: that.data.tel }, login: false, success(result) { util.showSuccess(\'请求成功完成\') that.setData({ requestResult: JSON.stringify(result.data) }) console.log(result); }, fail(error) { util.showModel(\'请求失败\', error); console.log(\'request fail\', error); } }), that.setData({ tel: \'\', VerificationCode: \'\' }) } }, //获取验证码按钮 bindButtonTap: function () { var that = this; that.setData({ disabled: true, //只要点击了按钮就让按钮禁用 (避免正常情况下多次触发定时器事件) color: \'grey\', }) var tel = that.data.tel; var currentTime = that.data.currentTime //把手机号跟倒计时值变例成js值 var warn = null; //warn为当手机号为空或格式不正确时提示用户的文字,默认为空 if (tel == \'\') { warn = "号码不能为空"; } else if (tel.trim().length != 11 || !/^1[3|4|5|6|7|8|9]\d{9}$/.test(tel)) { warn = "手机号格式不正确"; } else { //当手机号正确的时候提示用户短信验证码已经发送 wx.showToast({ title: \'短信验证码已发送\', icon: \'none\', duration: 2000 }); //设置一分钟的倒计时 var interval = setInterval(function () { currentTime--; //每执行一次让倒计时秒数减一 that.setData({ text: currentTime + \'s\', //按钮文字变成倒计时对应秒数 }) //如果当秒数小于等于0时 停止计时器 且按钮文字变成重新发送 且按钮变成可用状态 倒计时的秒数也要恢复成默认秒数 即让获取验证码的按钮恢复到初始化状态只改变按钮文字 if (currentTime <= 0) { clearInterval(interval) that.setData({ text: \'重新发送\', currentTime: 61, disabled: false, color: \'red\' }) } }, 1000); }; //判断 当提示错误信息文字不为空 即手机号输入有问题时提示用户错误信息 并且提示完之后一定要让按钮为可用状态 因为点击按钮时设置了只要点击了按钮就让按钮禁用的情况 if (warn != null) { wx.showModal({ title: \'提示\', content: warn }) that.setData({ disabled: false, color: \'red\' }) return; }; }, })
wxss:
.all{ height: 100vh; width: 100vw; /* border: 2rpx solid blue; */ } .tel{ position: relative; top: 10vh; left: 10vw; height: 16vh; width: 80vw; /* border: 2rpx solid red; */ } .icon_tel{ position: absolute; top: 1vh; left: 2vh; height: 6vh; width: 24vw; /* border: 2rpx solid red; */ } .tel_image{ position: absolute; height: 6vh; width: 7vw; /* border: 2rpx solid red; */ } .tel_words{ position: absolute; left: 9vw; height: 6vh; width: 15vw; top: 1vh; /* border: 2rpx solid red; */ } .content_tel{ position: absolute; top: 8vh; left: 2vw; height: 6vh; width: 75vw; /* border: 2rpx solid blue; */ } .line_adress{ position: absolute; height: 3rpx; width: 21vw; left: 2vw; bottom: 0.5vh; background:gainsboro; } .line_input{ position: absolute; height: 3rpx; width: 47vw; left: 25vw; bottom: 0.5vh; background:gainsboro; } .line_VerificationCode{ position: absolute; height: 3rpx; width: 47vw; left: 2vw; bottom: 0.5vh; background:gainsboro; } .adress{ position: absolute; top: 1vh; height: 5vh; width: 20vw; /* border: 2rpx solid gold; */ text-align: center; } .sign{ position: absolute; height: 5vh; width: 4vw; top: 2vh; left: 20vw; /* border: 2rpx solid greenyellow; */ text-align: center; align-items: center; font-size: 22rpx; } .input_tel{ position: absolute; height: 6vh; width: 47vw; left: 28vw; /* border: 2rpx solid red; */ } .input_VerificationCode{ position: absolute; height: 6vh; width: 47vw; left: 2vw; } .VerificationCode{ position: relative; top: 15vh; left: 10vw; height: 16vh; width: 80vw; /* border: 2rpx solid red; */ } .icon_VerificationCode{ position: absolute; top: 1vh; left: 3vh; height: 6vh; width: 24vw; /* border: 2rpx solid red; */ } .content_VerificationCode{ position: absolute; top: 8vh; left: 2vw; height: 6vh; width: 47vw; /* border: 2rpx solid blue; */ } .button_VerificationCode{ /* border: 2rpx solid red; */ position: absolute; top: 7.5vh; left: 50vw; height: 8vh; width: 32vw; border-radius:60rpx; background: red; } .world{ position: absolute; height: 70rpx; width: 160rpx; top: 10rpx; left: 40rpx; } .button_world{ font-size: 31rpx; text-align: center; align-items: center; color: white; } .button_submission{ position: absolute; height: 7vh; width: 60vw; top: 55vh; left: 20vw; /* border: 2rpx solid red; */ } .button_submissionWorld{ position: absolute; left: 26vw; font-size: 35rpx; /* border: 2rpx solid red; */ top: -2rpx; }