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插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 jQuery
jQuery实现一个简单的验证码功能
Jun 26 jQuery
基于jQuery封装的分页组件
Jun 26 jQuery
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
jQuery中元素选择器(element)简单用法示例
May 14 jQuery
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
jQuery冲突问题解决方法
Jan 19 jQuery
jquery实现广告上下滚动效果
Mar 04 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
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
基于python3生成标签云代码解析
2020/02/18 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
护士演讲稿范文
2014/01/05 职场文书
计算机相关的自我评价
2014/01/15 职场文书
护士进修自我鉴定
2014/02/07 职场文书
中职招生先进个人材料
2014/08/31 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
学生评语集锦
2015/01/04 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书