首页 > 技术文章 > 微信小程序验证码获取倒计时

DCL1314 2018-08-08 12:11 原文

wxml

<button disabled='{{disabled}}' bindtap="goGetCode">{{code}}</button> 

js

data:{
	disabled: false,
	code: '获取验证码',
},
goGetCode:function(){
    var that = this;
    var time = 60;
    that.setData({
      code: '60秒后重发',
      disabled: true
    })
    var Interval = setInterval(function() {
      time--;
      if (time>0){
        that.setData({
          code: time + '秒后重发'
        })
      }else{
        clearInterval(Interval);
        that.setData({
          code: '获取验证码',
          disabled: false
        })
      }
    },1000)

}

wxss

button{  
  width:260rpx;
  height:80rpx; 
  padding: 10rpx 0;
  color: #000;
  line-height: 50rpx; 
  font-size: 32rpx;
  color: #fff;
  background: green;
} 
button[disabled]:not([type]){
 background: red; 
  color: #fff;   
}

微信小程序验证码获取倒计时

wxml

<button disabled='{{disabled}}' bindtap="goGetCode">{{code}}</button> 

js

data:{
	disabled: false,
	code: '获取验证码',
},
goGetCode:function(){
    var that = this;
    var time = 60;
    that.setData({
      code: '60秒后重发',
      disabled: true
    })
    var Interval = setInterval(function() {
      time--;
      if (time>0){
        that.setData({
          code: time + '秒后重发'
        })
      }else{
        clearInterval(Interval);
        that.setData({
          code: '获取验证码',
          disabled: false
        })
      }
    },1000)

}

wxss

button{  
  width:260rpx;
  height:80rpx; 
  padding: 10rpx 0;
  color: #000;
  line-height: 50rpx; 
  font-size: 32rpx;
  color: #fff;
  background: green;
} 
button[disabled]:not([type]){
 background: red; 
  color: #fff;   
}

微信小程序用setData修改数组或对象中的一个属性值

主看部分wxml

<button wx:if="{{item.btn}}"  class="group-btn" disabled='{{disabled}}'  bindtap="getVerificationCode">{{item.btn}}</button> 

全部

<view class="pos-row">
    <input wx:if="{{item.type=='input'}}" class="{{item.key== 'identify'?'special': 'input'}}" placeholder="{{item.placeholder}}" data-index="{{index}}" data-key="{{item.key}}" bindinput="changeInfo" />
    <button wx:if="{{item.btn}}"  class="group-btn" disabled='{{disabled}}'  bindtap="getVerificationCode">{{item.btn}}</button> 
    <textarea wx:if="{{item.type=='textarea'}}"  placeholder="{{item.placeholder}}" data-key="{{item.key}}" bindinput="changeText"/> 
</view>

需求验证获取倒计时

点击获取验证码变成倒计时

解决方法

  • 1、先用一个变量把(list[2].btn)用字符串拼接起来

  • 2、将变量写在[]里面即可

      var btn = "list[" + 2 + "].btn"
      that.setData({
      	[btn]: '60秒后重发',
      })
    

js

Page({
	data:{
		list:[
		 {
	        type: 'input',
	        star: '*',
	        name: '您的姓名',
	        placeholder: '请输入您的真实姓名'
	      },
	      {
	        type: 'input',        
	        star: '*',        
	        name: '联系方式',
	        placeholder: '请输入您的手机号码'
	      },
	      {
	        type: 'input',        
	        star: '*',        
	        name: '验证码',
	        btn: '获取验证码',//倒计时
	        placeholder: '请输入验证码'
	      },
	      {
	        type: 'input',        
	        name: '您的地址',
	        placeholder: '请输入您的地址'
	      },
	      {
	        type: 'textarea',        
	        name: '您的爱好',
	        placeholder: '请输入您的爱好'
	      },
	      {
	        type: 'input',        
	        name: '您的年龄',
	        placeholder: '请输入您的年龄'
	      },
	      {
	        type: 'textarea',        
	        name: '留言备注',
	        placeholder: '请输入您的留言信息'
	      }
		],
		disabled: false

	},
	  getCode: function () {
	    var that = this;
	    var time = 60;    
	    var btn = "list[" + 2 + "].btn"
	    that.setData({
	      [btn]: '60秒后重发',
	      disabled: true
	    })
	    var interval = setInterval(function () {
	      time--;
	      if(time>0){
	        that.setData({
	          [btn]: time+'秒后重发'
	        });
	      }else{
	        clearInterval(interval);
	        that.setData({
	          [btn]: '获取验证码',
	          disabled: false          
	        });
	      }
	    }, 1000)
	  },
	  getVerificationCode() {
	    var that = this
	    that.getCode();   
	  
	  }
})

wxss

.star {
  display: inline-block;
  width: 10px;
  height: 100%;
  padding-right: 10rpx;
  font-size: 34rpx;
  color: #c21227;
}
.pos-row {
  position: relative;
  display: inline-block;
  width: 70%;
}
.input,textarea {
   width: 95%; 
  height: 66rpx; 
  border: 1px solid #000;
  border-radius: 8rpx;
  padding-left: 20rpx; 
  box-sizing: borde-box; 
  font-size: 28rpx;
  resize: none;
}
.special {
  width: 60%;
  height: 66rpx; 
  border: 1px solid #000;
  border-radius: 8rpx;
  padding-left: 20rpx; 
  margin-right: 10rpx;
  box-sizing: borde-box; 
  font-size: 28rpx;
  resize: none;
  /* text-overflow:clip;
  overflow:hidden;
  white-space:nowrap; */
}
textarea {
  width: 100%;
  height: 100rpx;
  padding: 16rpx 20rpx;
  box-sizing: border-box;
}
.group-btn {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 11;
  width: 50%;
  height: 35px;
 background: #f56730; 
  color: #fff;
  font-size: 28rpx;
  margin:0;
}
.group-btn[disabled]:not([type]){
 background: #f56730; 
  color: #fff;   
}
.from-btn {
  position: absolute;
  bottom: 0; 
  width: 100%;
  height: 70rpx;
  box-sizing: border-box;
  padding: 20px 40rpx 0;
}

推荐阅读