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


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 相关文章推荐
Javascript 继承机制的实现
Aug 12 Javascript
JQuery优缺点分析说明
Apr 10 Javascript
使用JavaScript实现连续滚动字幕效果的方法
Jul 07 Javascript
JS实现消息来时让网页标题闪动效果的方法
Apr 20 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
BootStrap实现鼠标悬停下拉列表功能
Feb 17 Javascript
javascript实现文字无缝滚动效果
Aug 26 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
Dec 16 Javascript
详解vue移动端日期选择组件
Feb 22 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
使用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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
表单元素事件 (Form Element Events)
2009/07/17 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python pymsql模块的使用
2020/09/07 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
函授毕业自我鉴定
2013/12/19 职场文书
汽车广告策划方案
2014/05/31 职场文书
英语复习计划
2015/01/19 职场文书
2015年安全生产责任书
2015/01/30 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
车间班组长竞聘书
2015/09/15 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
详解MySQL中的主键与事务
2021/05/27 MySQL
Python selenium的这三种等待方式一定要会!
2021/06/10 Python