当前位置:首页 > 日记 > 正文

ReactNative短信验证码倒计时控件的实现代码

ReactNative短信验证码倒计时控件的实现代码

由于最近刚开始认真的搞RN,可能有一些封装的不是最佳实践,还是希望大家多提意见,和大家一起进步吧。本文介绍了ReactNative短信验证码倒计时控件,分享给大家

功能

根据项目的需要,需要写一个自定义的控件,实现如下功能:

  1. 默认文字为点击获取验证码
  2. 点击后出现60秒的倒计时
  3. 颜色,字号可调
  4. 倒计时过程中,再次点击需要忽略掉
  5. 倒计时完成后文本恢复成点击获取验证码
  6. 再几次点击同之前

其实说了这么多,就是个最普通的验证码的功能。。。

效果

效果图如下:(录的图片比较一般,对付着看吧)

实现原理

自己封装了个控件,它内部含有一个Text控件,然后我们又写了一个timer,然后负责倒计时,然后每次都需要判断一下是否继续,然后加了一个flag字段,判断是否接受下次点击事件,当倒计时结束之后还需要将初始状态重置回去即可。

代码

控件代码

import React, {Component } from 'react';import {  StyleSheet,  Text,  View,  Image,  TextInput,  TouchableHighlight,  StatusBar,  Alert,  AppRegistry} from 'react-native';import LinkRow from '../components/LinkRow';import cStyles from '../styles/CommonStyle';import axios from 'axios';class MyCountTime extends Component {  constructor(props) {    super(props);    let timeLeft = this.props.timeLeft > 0 ? this.props.timeLeft : 5;    let width = this.props.width || 100;    let height = this.props.height || 50;    let color = this.props.color || '#42A5F5';    let fontSize = this.props.fontSize || 30;    let fontWeight = this.props.fontWeight || '600';    let borderColor = this.props.borderColor || '#42A5F5';    let borderWidth = this.props.borderWidth || 1;    let borderRadius = this.props.borderRadius || 4;    let backgroundColor = this.props.backgroundColor || '#42A5F5';    let begin = 0;    let press = this.props.press;    this.afterEnd = this.props.afterEnd || this._afterEnd;    this.style = this.props.style;    this.state = {      timeLeft: timeLeft,      begin: begin    };    this.countTextStyle = {      textAlign: 'center',      color: '#42A5F5',      fontSize: fontSize,      fontWeight: fontWeight    };    this.countViewStyle = {      backgroundColor: backgroundColor,      alignItems: 'center',      borderColor: borderColor,      borderWidth: borderWidth,      borderRadius: borderRadius,      width: width,      height: height    }  }  countdownfn(timeLeft, callback, begin) {    if (timeLeft > 0) {      this.state.begin = 1;      console.log("===lin===>");      let that = this;      let interval = setInterval(function () {        if (that.state.timeLeft < 1) {          clearInterval(interval);          callback(that)        } else {          let totalTime = that.state.timeLeft;          that.setState({            timeLeft: totalTime - 1          })        }      }, 1000)    }  }  _beginCountDown() {    if (this.state.begin === 1){      return;    }    let time = this.state.timeLeft;    console.log("===lin===> time " + time);    let afterEnd = this.afterEnd;    let begin = this.state.begin;    console.log("===lin===> start " + begin);    this.countdownfn(time, afterEnd, begin)  }  _afterEnd(that) {    console.log('------------time over');    that.setState({      begin : 0,      timeLeft : 5,    })  }  componentDidMount() {  }  render() {    return (      <View style={{position:'absolute',top:13,right:43,height:30}}>        <Text          onPress={this._beginCountDown.bind(this)}          style={{color: '#42A5F5', fontSize: 17,height:40 , zIndex:999}}> { this.state.begin === 0 ? '点击获取验证码' : this.state.timeLeft} </Text>      </View>    )  }}

应用代码

<MyCountTime timeLeft={5}></MyCountTime>

当然这只是,最简单的应用的代码,我们还提供了很多的自定义的属性,大家可以根据自己项目的需要,去调节这些参数。

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

相关文章

PPT中怎样制作不同形状的

PPT中怎样制作不同形状的

形状,图片,电脑软件,PPT,  在PPT中插入一张图片,通常是矩形形状,有时候想改变图片的形状都不知道要怎么弄,这让不怎么熟练PPT的人情何以堪呢?以下是小编为您带来的关于PPT制作不同形状的图片,希望对您有所帮助。PPT制作不同形状的图片1、点击…

收藏AngularJS中最重要的核心功能

收藏AngularJS中最重要的核心功能

核心,最重要,功能,收藏,电脑软件,以下是AngularJS中最重要的核心功能如下所述:?数据绑定: 模型和视图组件之间的数据自动同步。?适用范围: 这些对象参考模型。它们充当控制器和视图之间的胶水。?控制器: 这些Javascript函数绑定到特定的范围…

利用JS做网页特效_大图轮播 | 实例

利用JS做网页特效_大图轮播 | 实例

网页特效,大图,实例,电脑软件,JS,废话不多说,直接上代码:<style> * { margin: 0px; padding: 0px; } .stage { width: 500px; height: 300px; border: 5px solid black; mar…

photoshop  蓝色玻璃按钮

photoshop 蓝色玻璃按钮

按钮,蓝色,玻璃,电脑软件,photoshop,最终效果图 12 3 4 阅读全文 1 23 4 阅读全文 1 2 34 阅读全文1 2 3 4阅读全文…

微信小程序 宽高自适应详解

微信小程序 宽高自适应详解

自适应,宽高,详解,程序,电脑软件,微信小程序 图片宽高自适应1.以前将小程序图片宽度设置为屏幕宽度:imageLoad: function () { this.setData({ imageWidth: wx.getSystemInfoSync().windowWidth }) }2.现在:.imgClass{ width: 100vw;…

wps文字如何删除其中一页图文教程

wps文字如何删除其中一页图文教程

文字,删除,图文教程,方法,电脑软件,  在制作wps文档的时候,怎么删除文档其中的一页呢?对于新手来说不熟悉使用wps怎么办?下面小编就为你介绍wps文字怎样删除一页的方法,希望能帮到大家。wps文字删除其中一页的方法第一种方法  打开文档,找…

详解使用angularjs的ng-options时

详解使用angularjs的ng-options时

默认值,详解,如何设置,初始值,电脑软件,这两天我用ng-options过程中遇到的初始值为空白的问题,记得去年就遇到过,怎么解决的忘记了,费了一阵子功夫之后解决了,想记下来,方便遇到同样问题的小伙伴当然还有自己。1.场景:就是做一个查询列表的弹窗,其…

javascript实现二叉树遍历的代码

javascript实现二叉树遍历的代码

二叉树遍历,代码,电脑软件,javascript,前言:紧接着上篇 二叉树的javascript实现 ,来说一下二叉树的遍历。本次一本正经的胡说八道,以以下这个二叉树为例子进行遍历:接着是要引入二叉树实现的代码:function Node(data, left, right) { this.data…

ps怎么设计一款独特的彩色炫光字体

ps怎么设计一款独特的彩色炫光字体

字体,独特,彩色,电脑软件,ps,今天我们来看看使用PS制作一组彩色炫光字体效果的文字的教程,很简单,图文如下。软件名称:Adobe PhotoShop7.0 简体中文版软件大小:154MB更新时间:2014-09-02好的,开始我们的教程1、新建900X500白色画布,输入文字(最好选…

怎么运用WPS来设计一个二维码

怎么运用WPS来设计一个二维码

二维码,电脑软件,WPS,  使用WPS文字制作属于自己的二维码,二维码的使用是越来越普遍,我们可以通过扫面二维码来进行支付,使用起来非常方便。以下是小编为您带来的关于WPS设计一个二维码,希望对您有所帮助。WPS设计一个二维码1、打开WPS文字这…

微信小程序 scroll-view隐藏滚动条

微信小程序 scroll-view隐藏滚动条

滚动条,详解,程序,电脑软件,微信小,一:scroll-view隐藏滚动条在书写网页的时候,往往会为了页面的美观,而选择去掉滚动区域默认的滚动条,而在这里,就是为小程序去掉滚动条的其中的一种方法:scroll-view.wxml:scroll-view.wxssscroll-view.js 最终…

PS导航器怎么快速定位的位置?

PS导航器怎么快速定位的位置?

定位,位置,导航,快速,电脑软件,PS窗口只显示了该图片的一部分图像,想要快速找到图片,就可以使用ps中的导航器快速的找到我们所需要的图像位置,下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更…