小程序短信倒計時寫法

小程序短信倒計時寫法

費話不多說,直接上代碼

wxml部分代碼

wxml部分先講解一下大致寫功能和寫法

    <view class="login-top">
        <input class="phonecode" placeholder="手機號碼" bindinput="phoneinput" type="number" bindinput="phoneinput" maxlength="11" />
        <view class="login-top1">
            <input type="number"  placeholder="驗證碼" bindinput="codeinput" maxlength="6" />
            <button bindtap="changeCode" disabled="{{codeDis}}"><text hidden="{{flag != true || phoneCode == '獲取驗證碼'}}">重發</text>{{phoneCode}}<text hidden="{{phoneCode == '獲取驗證碼'}}">S</text></button>
        </view>
    </view>

一.

1.bindinput="phoneinput" 給手機輸入框綁定一個phoneinput事件名

二.

bindinput="codeinput" 給輸入短信碼證碼輸入一個codeinput事件名

三.

1.bindtap="changeCode" 給發送短信按鈕codeinput事件名
2.disabled="{{codeDis}}" 給發送短信按鈕綁定一個點擊狀態
3.<text hidden="{{flag != true || phoneCode == '獲取驗證碼'}}">重發</text> 如果第二次發送要牽扯到重發這兩個字,data定義數據里的flag!=true 或者 phoneCode == '獲取驗證碼'的時候隱藏掉重發兩個字
4.{{phoneCode}} //定義在發送短信按鈕上的文字對應的數據
5<text hidden="{{phoneCode == '獲取驗證碼'}}">S</text>當發送短信時,data值里定義的數據里phoneCode == '獲取驗證碼'隱藏掉這個s字

js部分

Page({
  data:{
    flag : false,
    codeDis : false,
    phoneCode : "獲取驗證碼",
    telephone : "",
    codePhone : ""
  },
  changeCode () {
      var _this = this
      let telephone = this.data.telephone
      if(telephone.length!= 11 || isNaN(telephone)){
          wx.showToast({
              title: '請輸入有效的手機號碼',
              icon : "loading"
          })
          setTimeout(function(){
              wx.hideToast()
          },2000)
          return
      }
      this.setData({
          codeDis : true
      })
      //發送短信驗證碼
      RQ.request({
          url:"******************",
          data :{
              phone : this.data.telephone
          },
          success : function(res){
              let data = res.data
              if(data.respCode != "000"){
                    _this.setData({
                        codeDis : false
                    })
                    wx.showToast({
                        title: data.respMessage,
                        icon : "loading"
                    })
                    setTimeout(function(){
                        wx.hideToast()
                    },2000)
               }else{
                    _this.setData({
                       phoneCode : 60
                    })
                    let time = setInterval(()=>{
                        let phoneCode = _this.data.phoneCode
                        phoneCode --
                        _this.setData({
                            phoneCode : phoneCode
                        })
                        if(phoneCode == 0){
                             clearInterval(time)
                             _this.setData({
                                  phoneCode : "獲取驗證碼",
                                  flag : true
                             })
                        }
                    },1000)
               }
          }
      })
      
      
  },
  phoneinput (e) {
      console.log(e)
      let value = e.detail.value
      console.log(value)
      this.setData({
          telephone : value
      })
  },
  codeinput (e) {
      let value = e.detail.value
      console.log(value)
      this.setData({
          codePhone : value
      })
  }
})

一.data這個選項定義的參數解釋一下
1 flag : false, //是否是第二次發送短信驗證碼的標識
2 codeDis : false, //點擊狀態
3 phoneCode : "獲取驗證碼", //短信驗證按鈕上顯示的文案
4 telephone : "", //手機輸入框的值
5 codePhone : "" //短信值入框的值

二.phoneinput這個方法解釋一下

  phoneinput (e) {
      console.log(e)
      let value = e.detail.value
      //把輸入框內的值變動時把值給value這個變量
      console.log(value)
      this.setData({
          telephone : value
      })
   //同時改變data定義的機號碼值 = 這個value變量名
  //所以每次改動就會跟著改動這個telephone值
  },

三、 codeinput 這個方法以上面同理

四、點擊按鈕改變按鈕上的文字和60秒倒計時效果

 changeCode () {
      var _this = this
     //  把這個_this指向從新指向
      let telephone = this.data.telephone
    //拿到telephone數據
      if(telephone.length!= 11 || isNaN(telephone)){
    //先進行基本的11位和數字校驗
          wx.showToast({
              title: '請輸入有效的手機號碼',
              icon : "loading"
          })
          setTimeout(function(){
              wx.hideToast()
          },2000)
          return
      }
   //如果以上校驗不成功就彈提示
      this.setData({
          codeDis : true
      })
  //成功的話我們把codeDis這個數據狀態改成不可點擊,點擊無效
      //發送短信驗證碼
      RQ.request({  //這里的寫法是封裝的發送請求,用官方的api一個樣
          url:"******************", //請求地址
          data :{   
              phone : this.data.telephone
             //把手機號碼傳給后臺
          },
          success : function(res){
              let data = res.data
            //成功之后拿到返回的數據
              if(data.respCode != "000"){
              //表示返回不成功 000
                    _this.setData({
                        codeDis : false
                    })
                  //不成功的話把這個點擊按鈕的狀態再變成可點擊的
                    wx.showToast({
                        title: data.respMessage,
                        icon : "loading"
                    })
                    setTimeout(function(){
                        wx.hideToast()
                    },2000)
             //提示錯誤信息
               }else{
                   //這里表示返回成功的話
                    _this.setData({
                       phoneCode : 60
                    })
//先把按鈕上的值變成60,
//<text hidden="{{phoneCode == '獲取驗證碼'}}">S</text>經過判斷會顯示60s
                    let time = setInterval(()=>{
                        let phoneCode = _this.data.phoneCode
                       //把phoneCode這個數據賦值給phoneCode這個變量
                        phoneCode --
                   //每秒進行減1
                        _this.setData({
                            phoneCode : phoneCode
                        })
                 //每一秒減一的時候同時再改變phoneCode這個數據
                        if(phoneCode == 0){
                  //當phoneCode這個數據變成0的時候
                             clearInterval(time)
                 //停掉計時
                             _this.setData({
                                  phoneCode : "獲取驗證碼",
                                  flag : true
                             })
       //再把phoneCode這個數據改成 "獲取驗證碼"
      //同時再把 flag這個數據變成true此時就代表已經發送過一次
//<text hidden="{{flag != true || phoneCode == '獲取驗證碼'}}">重發
//如果再點擊發送的話上面的這個重發就會生效顯示 
                        }
                    },1000)
               }
          }
      })
      

//總體就是這樣子,給大家大致了解小程序數據驅動的寫法,以后我還會寫很多例子,多多關注,謝謝,沒時間多寫一些費話了,寫的詳細能看的懂才是最關鍵

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容