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中的deferred使用方法
Mar 27 jQuery
利用jQuery解析获取JSON数据
Apr 08 jQuery
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 jQuery
jquery与js实现全选功能的区别
Jun 11 jQuery
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
基于jquery ajax的多文件上传进度条过程解析
Sep 11 jQuery
jQuery 筛选器简单操作示例
Oct 02 jQuery
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
jQuery实现购物车全功能
Jan 11 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
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
AngularJS 控制器 controller的详解
2017/10/17 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
Java及python正则表达式详解
2017/12/27 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
校长岗位职责
2013/11/26 职场文书
元旦促销方案
2014/03/15 职场文书
民族学专业求职信
2014/07/28 职场文书
合同意向书范本
2014/07/30 职场文书
小学优秀学生评语
2014/12/29 职场文书
邀请书模板
2015/02/02 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
学生病假条范文
2015/08/17 职场文书