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 ui sortable拖拽后保存位置
Apr 27 jQuery
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
jquery插件开发之选项卡制作详解
Aug 30 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 jQuery
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
jQuery插件Validation表单验证详解
May 26 jQuery
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
jquery更改元素属性attr()方法操作示例
May 22 jQuery
jQuery实现开关灯效果
Aug 02 jQuery
Jquery cookie插件实现原理代码解析
Aug 04 jQuery
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 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/07/15 PHP
php设置编码格式的方法
2013/03/05 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
详解Python中的array数组模块相关使用
2016/07/05 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
浅谈python3中input输入的使用
2019/08/02 Python
python递归下载文件夹下所有文件
2019/08/31 Python
python实现视频读取和转化图片
2019/12/10 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
欢送退休感言
2014/02/08 职场文书
学校个人对照检查材料
2014/08/26 职场文书
房产协议书范本2014
2014/09/30 职场文书
周一给客户的问候语
2015/11/10 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python