微信小程序实现动态验证码

目录
  • 一、创建自定义组件verification-code
  • 二、在index页面使用

本文实例为大家分享了微信小程序实现动态验证码的具体代码,供大家参考,具体内容如下

一、创建自定义组件verification-code

verification-code.js

// pages/test1/verificationQr/verificationQr.js
var ctx;
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    width:{
      type: Number,
      value: 150
    },
    height: {
      type: Number,
      value: 48
    },
    count:{
      type:Number,
      value:4
    },
    fontSize: {
      type: Number,
      value: 34
    },
    fontFamily:{
      type: String,
      value: "SimHei"
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    text: '',
    count: 4,
    width:90,
    height:28,
    fontSize:30,
    fontFamily:"SimHei"
  },

  ready() {
    this.setData({
      count:this.properties.count,
      width:this.properties.width,
      height:this.properties.height,
      fontSize:this.properties.fontSize,
      fontFamily:this.properties.fontFamily
    })
    this.drawPic(this)
  },
  /**
   * 组件的方法列表
   */
  methods: {
    crash(){
      this.drawPic(this)
    },
    /**绘制验证码图片**/
    drawPic(that) {
      ctx = wx.createCanvasContext('canvas',this);
      /**绘制背景色**/
      ctx.fillStyle = randomColor(180, 240); //颜色若太深可能导致看不清
      ctx.fillRect(0, 0, that.data.width, that.data.height)
      /**绘制文字**/
      var arr;
      var text = '';
      var str = 'ABCEFGHJKLMNPQRSTWXY123456789';
      for (var i = 0; i < that.data.count; i++) {
        var txt = str[randomNum(0, str.length)];
        ctx.fillStyle = randomColor(50, 160); //随机生成字体颜色
        ctx.font = randomNum(20, 26) + 'px SimHei'; //随机生成字体大小
        var x = 10 + i * 20;
        var y = randomNum(25, 30);
        var deg = randomNum(-30, 30);
        //修改坐标原点和旋转角度
        ctx.translate(x, y);
        ctx.rotate(deg * Math.PI / 180);
        ctx.fillText(txt, 5, 0);
        text = text + txt;
        //恢复坐标原点和旋转角度
        ctx.rotate(-deg * Math.PI / 180);
        ctx.translate(-x, -y);
      }
      /**绘制干扰线**/
      for (var i = 0; i < 4; i++) {
        ctx.strokeStyle = randomColor(40, 180);
        ctx.beginPath();
        ctx.moveTo(randomNum(0, that.data.width), randomNum(0, that.data.height));
        ctx.lineTo(randomNum(0, that.data.width), randomNum(0, that.data.height));
        ctx.stroke();
      }
      /**绘制干扰点**/
      for (var i = 0; i < 20; i++) {
        ctx.fillStyle = randomColor(0, 255);
        ctx.beginPath();
        ctx.arc(randomNum(0, that.data.width), randomNum(0, that.data.height), 1, 0, 2 * Math.PI);
        ctx.fill();
      }
      ctx.draw(false, function() {
        console.log(text)
        that.triggerEvent('result', { text });
        that.setData({
          text: text,
        })
      })
    }
  }
})
function randomNum(min, max) {
  return Math.floor(Math.random() * (max - min) + min);
}
/**生成一个随机色**/
function randomColor(min, max) {
  var r = randomNum(min, max);
  var g = randomNum(min, max);
  var b = randomNum(min, max);
  return "rgb(" + r + "," + g + "," + b + ")";
}

verification-puzzle.json

{
  "component": true,
  "usingComponents": {}
}

verification-puzzle.wxml

<canvas style="width:{{width}}px;height:{{height}}px" canvas-id="canvas" bindtap='crash'></canvas>

二、在index页面使用

index.wxml

<verification-code id="verification"></verification-code>
<view bindtap="crash">刷新</view>

index.js

// pages/test/test/test.js
Page({

  /**
   * 页面的初始数据
   */
  data: {},
  crash() {
    this.verification.crash()
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    this.verification = this.selectComponent('#verification')
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

index.json

{
  "usingComponents": {
      "verification-code": "/components/verification-code/verification-code"
    }
}

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

(0)

相关推荐

  • 微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)

    下面一小段代码给大家介绍微信小程序 功能函数 密码验证*,具体代码如下所示: //登录输入密码 userPasswordInput: function (e) { var that = this; this.setData({ userPassword: e.detail.value }) // console.log(e.detail.value.length) // console.log(e.detail.value); var value = e.detail.value var str

  • 微信小程序实现随机验证码功能

    本文实例为大家分享了微信小程序实现随机验证码的具体代码,供大家参考,具体内容如下 效果图: 小程序上经常会有一些注册 申请页面需要用到随机验证码.具体实现方法不多说 直接上代码 <view class='yanzhengma'> <text class='left'>{[code]}</text> <text class='right' bindtap='huanyizhang'>换一张</text> </view> CSS: .ya

  • 详解如何使用微信小程序云函数发送短信验证码

    其实微信小程序前端和云端都是可以调用短信平台接口发送短信的,使用云端云函数的好处是无需配置域名,也没有个数限制. 本文使用的是榛子云短信平台(http://smsow.zhenzikj.com) ,SDK下载: http://smsow.zhenzikj.com/doc/sdk.html 1.安装 下载后的SDK在cloudfunctions文件夹下会包含3个云函数文件夹,如下: 由于目前IDE没有云函数导入功能,您需要手工创建同名的云函数,然后将云函数下的文件手工拷进去 注:下载的SDK是一个

  • 微信小程序如何获取手机验证码

    一种比较常见的功能获取手机验证码,供大家参考,具体内容如下 先看效果图: 其实这个功能实现起来很简单,主要就是调取第三方接口,拿到返回值验证的问题 直接上代码吧: <view class='changeInfo'> <view class='changeInfoName'> <input placeholder='请输入姓名' bindinput='getNameValue' value='{{name}}'/> </view> <view class

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

    本文实例为大家分享了微信小程序发送验证码按钮效果展示的具体代码,供大家参考,具体内容如下 首先上图,最终效果如下: 实现关键点 获取验证码按钮无边框: 可以用 button::after{ border: none; } 来去除边框,或者直接用view绑定点击事件.本例子中没有使用button 点击发送后,60秒内按钮处于disable状态 点击发送后,text分为剩余秒数和后缀两部分 .form_group 使用 flex 布局 代码 .wxml <view class="form_gr

  • 微信小程序实现倒计时60s获取验证码

    本文实例为大家分享了微信小程序倒计时获取验证码的具体代码,供大家参考,具体内容如下 1.工具类(引用微信小程序提供的工具类) countdown.js class Countdown { constructor(options = {}) { Object.assign(this, { options, }) this.__init() } /** * 初始化 */ __init() { this.page = getCurrentPages()[getCurrentPages().length

  • 微信小程序绑定手机号获取验证码功能

    微信小程序验证码获取方式,代码如下所示: <!-- 绑定手机号 --> <view class='content'> <form bindsubmit="formSubmit"> <view class='phone-box'> <text class='phone'>手机号</text> <input name="phone" type='number' placeholder=&quo

  • 微信小程序实现验证码获取倒计时效果

    本文实例为大家分享了微信小程序实现获取验证码倒计时效果的具体代码,供大家参考,具体内容如下 wxml <button disabled='{{disabled}}' data-id="2" bindtap="getVerificationCode"> {{time}} </button> js var interval = null //倒计时函数 Page({ data: { date:'请选择日期', fun_id:2, time: '获

  • 微信小程序发送短信验证码完整实例

    微信小程序注册完整实例,发送短信验证码,带60秒倒计时功能,无需服务器端.效果图: 代码: index.wxml <!--index.wxml--> <view class="container"> <view class='row'> <input placeholder='请输入姓名' bindinput='bindNameInput'/> </view> <view class='row'> <inpu

  • 微信小程序6位或多位验证码密码输入框功能的实现代码

    在做小程序过程中做一个6位验证码输入框,本以为很简单,但是在写的时候遇到各种各样的阻力,在网上查阅资料也寥寥无几,后来经过一番思考,终于敲定下来本人最满意的方案,特意发出来让大家参考一下,希望能帮到大家! 一.效果图如下: 二.代码部分 wxml: <form bindsubmit="formSubmit"> <view class='content'> <block wx:for="{{Length}}" wx:key="i

随机推荐