微信小程序的注册页面包含倒计时验证码、获取用户信息


Posted in Javascript onMay 22, 2019

1、页面展示

微信小程序的注册页面包含倒计时验证码、获取用户信息

2、wxml代码

<!--pages/register/register.wxml-->
<scroll-view>
 <image src='/images/register.png' mode='widthFix' class="topImage"></image>
 <view class='input-top'>
  <input id="telphone" maxlength='11' type="text" placeholder="请输入手机号" bindinput="inputPhoneNum"/>
  <text wx:if="{{!send}}" bindtap='sendMsg' class="sendMsg">获取验证码</text>
  <text wx:if="{{send}}" class="sendMsg" bindtap="sendMsg">{{second+"s"}}</text>
 </view>
 <view class="input-buttom">
  <input id="captcha" type="number" maxlength="4" placeholder="请输入4位验证码" bindinput="inputCode"/>
 </view>
 <button class="btn" open-type="getUserInfo" bindgetuserinfo="onGotUserInfo" lang="zh_CN">立即用伞</button>
 <view class='protocol'>
 <text class="protocol-left">点击立即用伞即表示同意</text>
 <text class="protocol-right">《共享雨伞租赁服务协议》</text>
 </view>
</scroll-view>

3、wxss代码

page{
 background: #f0eff4;
}
.topImage {
 width: 100%;
 height: auto;
}
.input-top, .input-buttom {
 font-size: 30rpx;
 padding-left: 30rpx;
 margin: 0rpx 20rpx;
 background-color: white;
 height: 70rpx;
}
.input-top {
 flex-direction: row;
 display: flex;
 justify-content: space-between;
 margin-bottom: 1px;
 margin-top: 20rpx;
}
#telphone, #captcha {
 height: 70rpx;
}
.sendMsg {
 line-height: 70rpx;
 margin-right: 30rpx;
 color: #f9b400;
}
.btn {
 margin: 0rpx 20rpx;
 background-color: #f9b400;
 color: white;
 margin-top: 20rpx;
 font-size: 30rpx;
 opacity:0.8
}
/* 下方协议开始 */
.protocol{
 text-align: center;
}
.protocol-left {
 color: #333;
 font-size: 25rpx;
}
.protocol-right {
 font-size: 23rpx;
 color: #f9b400;
}
/* 下方协议结束 */

4、js代码

Page({
 //页面的初始数据
 data: {
 send: false, //是否已经发送验证码
 second: 120, //验证码有效时间
 phoneNum: '', //用户输入的电话号码
 code: '', //用户输入的验证码
 },
 //当输入手机号码后,把数据存到data中
 inputPhoneNum: function(e) {
 let phoneNum = e.detail.value;
 this.setData({
  phoneNum: phoneNum,
 })
 },
 //前台校验手机号
 checkPhoneNum: function(phoneNum) {
 let str = /^(1[3|5|8]{1}\d{9})$/;
 if (str.test(phoneNum)) {
  return true;
 } else {
  //提示手机号码格式不正确
  wx.showToast({
  title: '手机号格式不正确',
  image: '/images/warn.png',
  })
  return false;
 }
 },
 //调用发送验证码接口
 sendMsg: function() {
 var phoneNum = this.data.phoneNum;
 if (this.checkPhoneNum(phoneNum)) {
  wx.request({
  url: '写自己的后台请求发送验证码访问URL',
  method: 'POST',
  data: {
   telphone: phoneNum,
  },
  header: {
   "Content-Type": "application/x-www-form-urlencoded"
  },
  success: (res) => {
   if (获取验证码成功) {
   //开始倒计时
   this.setData({
    send: true,
   })
   this.timer();
   } else {
   //提示获取验证码失败
   wx.showToast({
    title: '获取验证码失败',
    image: '/images/warn.png',
   })
   }
  },
  })
 }
 },
 //一个计时器
 timer: function() {
 let promise = new Promise((resolve, reject) => {
  let setTimer = setInterval(
  () => {
   this.setData({
   second: this.data.second - 1
   })
   if (this.data.second <= 0) {
   this.setData({
    second: 60,
    send: false,
   })
   resolve(setTimer)
   }
  }, 1000)
 })
 promise.then((setTimer) => {
  clearInterval(setTimer)
 })
 },
 //当输完验证码,把数据存到data中
 inputCode: function(e) {
 this.setData({
  code: e.detail.value
 })
 },
 //点击立即用伞按钮后,获取微信用户信息存到后台
 //(问题缺陷:用户更改个人信息后,后台拿到的还是旧数据,不过用户信息最重要的还是openid和用户填写的手机号,其他都不重要)
 onGotUserInfo: function(e) {
 // TODO 对数据包进行签名校验
 //前台校验数据
 if (this.data.phoneNum === '' || this.data.code===''){
  wx.showToast({
  title: "请填写手机号码和验证码",
  image: '/images/warn.png',
  })
 }
 //获取用户数据,(备注:我在用户一进入小程序就已经自动把openId获取到,然后放到缓存里)
 var userInfo = {
  nickName: e.detail.userInfo.nickName,
  avatarUrl: e.detail.userInfo.avatarUrl,
  gender: e.detail.userInfo.gender,
  phoneNum: this.data.phoneNum,
  openId: wx.getStorageSync('openid') 
 }
 //获取验证码
 var code = this.data.code;
 //用户信息存到后台
 wx.request({
  url: '写自己的后台请求注册URL',
  method: 'POST',
  data: {
  telphone: userInfo.phoneNum,
  code: code,
  nickName: userInfo.nickName,
  gender: userInfo.gender,
  openId: userInfo.openId, 
  },
  header: {
  "Content-Type": "application/x-www-form-urlencoded"
  },
  success: (res) => {
  if (如果用户注册成功) {
   console.log("【用户注册成功】");
   wx.setStorage({
   key: "registered",
   data: true
   });
   wx.redirectTo({
   url: '../user/user?orderState=0'
   });
  } else {
   console.error("【用户注册失败】:" + res.data.resultMsg);
   wx.showToast({
   title: res.data.resultMsg,
   image: '/images/warn.png',
   })
  }
  }
 })
 },
})

总结

以上所述是小编给大家介绍的微信小程序的注册页面包含倒计时验证码、获取用户信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
Raphael带文本标签可拖动的图形实现代码
Feb 20 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
js实现的四级左侧网站分类菜单实例
May 06 Javascript
解决js函数闭包内存泄露问题的办法
Jan 25 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
Apr 24 Javascript
关于使用js算总价的问题
Jun 23 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 #Javascript
jQuery Migrate 插件用法实例详解
May 22 #jQuery
自定义Vue组件打包、发布到npm及使用教程
May 22 #Javascript
Vue中的组件及路由使用实例代码详解
May 22 #Javascript
Vue侦测相关api的实现方法
May 22 #Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 #Javascript
微信小程序系列之自定义顶部导航功能
May 21 #Javascript
You might like
php,ajax实现分页
2008/03/27 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
jquery动态添加删除一行数据示例
2014/06/12 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
Vue.use源码分析
2017/04/22 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python实现京东秒杀功能代码
2019/05/16 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
教师爱岗敬业演讲稿
2014/05/05 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
pytorch查看网络参数显存占用量等操作
2021/05/12 Python