jQuery插件开发发送短信倒计时功能代码


Posted in jQuery onMay 09, 2017

实现的主要功能如下:

1.点击按钮的时候,可以进行倒计时,倒计时自定义。

2.当接收短信失败后,倒计时停止,可点击重新发送短信。

3.点击的元素支持一般标签和input标签。

html代码:

<input type="button" class="sameBtn btnCur" value="发送验证码"/>
<div class="sameBtn btnCur2">发送验证码</div>

css代码:

body{padding:100px;text-align: center;}
.sameBtn{display: inline-block;font-size:12px;cursor:pointer;width:76px;height:25px;line-height: 25px;text-align: center;border:0;background: #3186df;color:#fff;}
.sameBtn.current{background: #b1b1b1;}

js代码:

//短信倒计时功能
/**使用方式如下:
 * $(".btnCur").CountDownF({
 *    time:120,
 *     resetWords:'重新发送', //文字定义 
 *    cnSeconds:'s',//倒计时中显示中文的秒,还是s
 *    clickClass:'current', //点击后添加的class类
 *    countState:true,
 *    callback:function(){
 *      setTimeout(function(){
 *       //当发送失败后,可以立即清除倒计时与其状态
 *        $(".btnCur").CountDownF('clearState');
 *      },3000);
 *    }
 *  });
 * 
 * */
;(function($,window,document,undefined){
  var pluginName = 'CountDownF',
  defaluts = {
    time:120,
    resetWords:'重新发送', //文字定义
    cnSeconds:'s',//倒计时中显示中文的秒,还是s
    clickClass:'current', //点击后添加的class类
    countState:true //是否可以倒计时,true可以倒计时,false不能进行倒计时
  }
  function Count(element,options){
    this.element = element;
    this.$element = $(this.element);
    this.state = true;
    this.settings = $.extend({},defaluts,options);
    this.number = this.settings.time;
    this.init();
  }
  Count.prototype = {
    init:function(){
      var self = this;
      self.$element.on('click',function(){
        if(self.state && self.settings.countState){
          self.state = false;
          if(self.settings.countState){
            self._count();
          }
          if(self.settings.callback){
            self.settings.callback();
          }
        }
      });
    },
    //倒计时函数
    _count:function(){
      var self = this;
      if(self.number == 0){
        self._clearInit();
      }else{
        if(self.number < 10){
          //如果当前元素是input,使用val赋值
          this.$element.attr('type') ? this.$element.val('0' + self.number + self.settings.cnSeconds) : this.$element.html('0' + self.number + self.settings.cnSeconds);  
        }else{
          this.$element.attr('type') ? this.$element.val(self.number + self.settings.cnSeconds) : this.$element.html(self.number + self.settings.cnSeconds);
        }
        self.number--;
        this.$element.addClass(self.settings.clickClass);
        self.clearCount = setTimeout(function(){
          self._count();
        },1000);
      }
    },
    //修改是否可发送短信验证码倒计时状态
    change:function(state){
      var self = this;
      self.settings.countState = state;
    },
    //置为初始状态
    _clearInit:function(){
      var self = this;
      self.$element.removeClass(self.settings.clickClass);
      self.$element.attr('type') ? self.$element.val(self.settings.resetWords) : self.$element.html(self.settings.resetWords); 
      clearTimeout(self.clearCount);
      self.number = self.settings.time;
      self.state = true;
    },
    //清除倒计时进行状态
    clearState:function(){
      var self = this;
      self._clearInit();
    }
  };
  $.fn.CountDownF = function(options){
    var args = arguments;
    if(options === undefined || typeof options ==='object' ){
      return this.each(function(){
        if(!$.data(this,'plugin' + pluginName)){
          $.data(this,'plugin' + pluginName,new Count(this,options));
        }
      });
    }
    else if(typeof options === 'string' && options !== 'init'){
      var returns;
       this.each(function(){
        var data = $.data(this,'plugin' + pluginName);
        if(data instanceof Count && typeof data[options] === 'function'){
          returns = data[options].apply(data,Array.prototype.slice.call(args,1));
        }
        if(options === 'destory'){
           $.data(this, 'plugin' + pluginName, null);
        }
      });
       return returns !== undefined ? returns : this;
    }
    else{
      $.error('Method' + options + 'does not exist on jQuery.CountDownF');
    }
  }
})(jQuery,window,document);

调用方式:

$(function(){
  $(".btnCur").CountDownF({
    time:120,
    countState:true,
    callback:function(){
      setTimeout(function(){
        $(".btnCur").CountDownF('clearState');
      },3000);
    }
  });
  $(".btnCur2").CountDownF({
    time:50,
    countState:true,
    cnSeconds:'秒',
    callback:function(){
      setTimeout(function(){
        $(".btnCur2").CountDownF('clearState');
      },5000);
    }
  });
})

 github地址:https://github.com/hxlmqtily1314/sms_countdown

以上所述是小编给大家介绍的jQuery插件开发发送短信倒计时功能代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

jQuery 相关文章推荐
jQuery轻松实现无缝轮播效果
Mar 22 jQuery
jQuery实现的手风琴侧边菜单效果
Mar 29 jQuery
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 jQuery
jQuery导航条固定定位效果实例代码
May 26 jQuery
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
jQuery使用动画队列自定义动画操作示例
Jun 16 jQuery
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
[jQuery] 事件和动画详解
Mar 05 jQuery
jquery中为什么能用$操作
Jun 18 jQuery
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
jquery实现点击弹出对话框
Feb 08 jQuery
Jquery $.map使用方法实例详解
Sep 01 jQuery
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
May 08 #jQuery
jquery平滑滚动到顶部插件使用详解
May 08 #jQuery
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 #jQuery
jquery replace方法去空格
May 08 #jQuery
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 #jQuery
JQuery实现图片轮播效果
May 08 #jQuery
jQuery中的deferred对象和extend方法详解
May 08 #jQuery
You might like
非常好的php目录导航文件代码
2006/10/09 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
php下获取http状态的实现代码
2014/05/09 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
JavaScript中this详解
2015/09/01 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
pyramid配置session的方法教程
2013/11/27 Python
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python 两个数据库postgresql对比
2019/10/21 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
Python各种扩展名区别点整理
2020/02/27 Python
pandas的resample重采样的使用
2020/04/24 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
火灾现场处置方案
2014/05/28 职场文书
重点工程汇报材料
2014/08/27 职场文书
男方婚前保证书
2015/02/28 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python