欢迎来到代码驿站!

JavaScript代码

当前位置:首页 > 网页前端 > JavaScript代码

微信小程序实现手机获取验证码倒计时60s

时间:2022-07-02 10:31:40|栏目:JavaScript代码|点击:

本文实例为大家分享了微信小程序实现手机获取验证码倒计时的具体代码,供大家参考,具体内容如下

功能展示:

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>

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;
}

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;
    };
  },
 
})

上一篇:Javascript中的async函数详解

栏    目:JavaScript代码

下一篇:一次JavaScript正则的诡异经历记录

本文标题:微信小程序实现手机获取验证码倒计时60s

本文地址:http://www.codeinn.net/misctech/206614.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有