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


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 相关文章推荐
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
jquery实现背景墙聚光灯效果示例分享
Mar 02 Javascript
巧用replace将文字表情替换为图片
Apr 17 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
JS长整型精度问题实例分析
Jan 13 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 Javascript
js实现抽奖的两种方法
Mar 19 Javascript
JS实现网页时钟特效
Mar 25 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
用Flash图形化数据(一)
2006/10/09 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
javascript模拟命名空间
2015/04/17 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
深入理解python try异常处理机制
2016/06/01 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
Python如何执行系统命令
2020/09/23 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
教师旷工检讨书
2014/01/18 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
客户接待方案
2014/02/26 职场文书
房地产项目建议书
2014/03/12 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers