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 23 jQuery
jQuery实现一个简单的验证码功能
Jun 26 jQuery
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
jquery 键盘事件的使用方法详解
Sep 13 jQuery
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
jQuery轮播图实例详解
Aug 15 jQuery
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
浅谈JS和jQuery的区别
Mar 27 jQuery
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
Jun 18 jQuery
jQuery实现简单评论区功能
Oct 26 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实现的验证码文件类实例
2015/06/18 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
vue实现添加与删除图书功能
2018/10/07 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
python全栈开发语法总结
2020/11/22 Python
Python LMDB库的使用示例
2021/02/14 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
中专生的个人自我评价
2013/12/11 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android