微信小程序实现发送验证码按钮效果


Posted in Javascript onDecember 20, 2018

本文实例为大家分享了微信小程序发送验证码按钮效果展示的具体代码,供大家参考,具体内容如下

首先上图,最终效果如下:

微信小程序实现发送验证码按钮效果

实现关键点

  • 获取验证码按钮无边框: 可以用 button::after{ border: none; } 来去除边框,或者直接用view绑定点击事件。本例子中没有使用button
  • 点击发送后,60秒内按钮处于disable状态
  • 点击发送后,text分为剩余秒数后缀两部分
  • .form_group 使用 flex 布局

代码

.wxml

<view class="form_group">
  <input type="text" placeholder="手机号码" placeholder-class="placeholder_style" data-name="data_phone" value="{{data_phone}}" bindinput='getInputKey' />
 </view>
 <view class="form_group">
  <input type="text" class="sendmsg_input" placeholder="短信验证码" data-name="data_code" value="{{data_code}}" placeholder-class="placeholder_style" bindinput='getInputKey' />
  <view class='vertificate' bindtap="getVerificationCode">{{time}}
  <text>{{suffix}}</text>
  </view>
 </view>

.wxss

.form_group {
 display: flex;
 flex-direction: row;
 justify-content: space-between;
}

.form_group input, .form_group picker {
 width: 676rpx;
 border-bottom: 1px solid #ddd;
 height: 121rpx;
 padding-left: 20rpx;
 font-family: PingFangSC-Regular;
 font-size: 32rpx;
 letter-spacing: 0;
 line-height: 121rpx;
}

.form_group .sendmsg_input {
 width: 370rpx;
}

.form_group .vertificate {
 width: 326rpx;
 border-bottom: 1px solid #ddd;
 height: 121rpx;
 padding-left: 20rpx;
 font-family: PingFangSC-Regular;
 font-size: 32rpx;
 letter-spacing: 0;
 line-height: 121rpx;
 text-align: center;
 color: #34c9c3;
}

.vertificate text {
 color: gray;
}

.placeholder_style {
 font-family: PingFangSC-Regular;
 font-size: 32rpx;
 color: #dbdbdb;
 letter-spacing: 0;
}

.js

import SignupService from '../service/sign-up.service.js';
import HTTP from '../../../utils/http.js';
import Util from '../../../utils/util.js';

let _signupService = new SignupService();
let _http = new HTTP();
let _util = new Util();

Page({
 data: {
 time: "获取验证码",
 currentTime: 61,
 disabled:false,
 suffix:'',
 data_phone:'',
 data_code:'',
 },
 
 ...
 
 // 获取输入框的值
 getInputKey(e) {
 let key = e.currentTarget.dataset.name;
 let value = e.detail.value;
 this.setData({
  [key]: value
 })
 },

 // 获取验证码
 getVerificationCode() {
 let _this = this;
 if (!_this.data.disabled) {
  _this.getCode();
 }
 },

 getCode() {
 let _this = this;
 let phone = _this.data.data_phone;
 if (_util.isPhoneAvailable(phone)) {
  _signupService.getCode(phone).then(res=>{  // 调用后端API,获取手机验证码
  _util.showToast('success',"已发送");
  _this.setData({
   disabled: true
  })
  },err=>{
  _util.showToast('none',"发送失败")
  });
  
  // 设置发送验证码按钮样式
  let interval = null;
  let currentTime = _this.data.currentTime;

  interval = setInterval(function() {
  currentTime--;
  _this.setData({
   time: currentTime,
   suffix: '秒后可重新获取'
  })
  if (currentTime <= 0) {
   clearInterval(interval)
   _this.setData({
   time: '重新发送',
   suffix: '',
   currentTime: 61,
   disabled: false
   })
  }
  }, 1000)
 } else {
  _util.showToast('none','请输入正确的手机号码。');  
 }
 },

sign-up.service.js

//获取手机验证码
 getCode(phone){
 return _http.request({
  type: 'post',
  url: '/account/validate-codes',
  data: {
  phone:phone
  }
 })
 }

http.js: 封装wx.request 为Promise

class HTTP {
 request(param){
 let _this = this;
 let baseUrl = '.......';
 return new Promise((resolve, reject) => {
  let access_token = wx.getStorageSync('access_token');
  wx.request({
  method: param.type || 'get',
  url: baseUrl+ param.url || '',
  data: param.data || null,
  header: access_token ? {
   'content-type': 'application/x-www-form-urlencoded',
   "Authorization": `Bearer ${access_token}`
  } : {
   'content-type': 'application/x-www-form-urlencoded',
  },
  success: (res => {
   if (res.statusCode === 200 || res.statusCode === 201) {
   //200: 服务端业务处理正常结束
   resolve(res.data)
   } else {
   //其它错误,提示用户错误信息
    
   /*** 
    * 需要根据接口文档改!!!
   */
   reject(res)
   }
  }),
  fail: (err => {
   if(err.responseJSON){
   reject(err.responseJSON.message)
   }else{
   reject(err);
   }
  })
  });
 });
 }
}

export default HTTP;

util.js

// 验证手机号码是否有效
 isPhoneAvailable(phone) {
 var myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
 if (!myreg.test(phone)) {
  return false;
 } else {
  return true;
 }
 }
 
//小程序弹框提示
 showToast(icon,msg,duration=2000){
 wx.showToast({
  title: msg,
  duration: duration,
  icon: icon
 })
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
javascript检测对象中是否存在某个属性判断方法小结
May 19 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
node.js中express中间件body-parser的介绍与用法详解
May 23 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
Jul 13 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
jquery中done和then的区别(详解)
Dec 19 jQuery
从setTimeout看js函数执行过程
Dec 19 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
vue绑定class的三种方法
Dec 24 Vue.js
使用puppeteer爬取网站并抓出404无效链接
Dec 20 #Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 #Javascript
js canvas实现橡皮擦效果
Dec 20 #Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 #Javascript
Cocos2d实现刮刮卡效果
Dec 20 #Javascript
浅谈Fetch 数据交互方式
Dec 20 #Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 #Javascript
You might like
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
wxPython窗口的继承机制实例分析
2014/09/28 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Python关于反射的实例代码分享
2020/02/20 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
大学生专科毕业生自我评价
2013/11/17 职场文书
大学生如何写自荐信
2014/01/08 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
反邪教警示教育方案
2014/05/13 职场文书
消防安全宣传标语
2014/06/07 职场文书
妈妈活动方案
2014/08/15 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
关于运动会的广播稿
2014/09/22 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书