基于jquery插件编写countdown计时器


Posted in Javascript onJune 12, 2016

废话不多说,直接上代码:
先展示一下插件调用方式: 

1. 需要先加载countdown插件对应的css文件,也就几行代码而已,可以不用引入,自己手写一样啦 

<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 <title>jquery countdown倒计时插件</title>
 <link rel="stylesheet" type="text/css" href="css/jquery.countdown-1.0.0.css"/>
 </head>

css代码内容:

* {
 margin: 0;
 padding: 0;
 -webkit-box-sizing: border-box;
 -moz-box-sizing: border-box;
 -ms-box-sizing: border-box;
 -o-box-sizing: border-box;
 box-sizing: border-box;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
}

html,
body {
 font: 24px/1.5 'Microsoft YaHei', arial, tahoma, '\5b8b\4f53', sans-serif;
 font-weight: 700;
 background: #efefef;
 -webkit-text-size-adjust: 100%;
 text-size-adjust: 100%;
}

#countdown {
 width: 60%;
 margin: 20% auto;
 color: #ff4d4d;
}

.countdown-day,
.countdown-hour,
.countdown-minute,
.countdown-second {
 display: inline-block;
 margin: 0 .5rem;
 background: #ff3f0f;
 font-size: 2rem;
 font-weight: 700;
 color: #fff;
}

2.再加载js文件,在此之前得先引入jquery
<script type="text/javascript" src="js/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="js/jquery.countdown-1.0.0.min.js"></script>
3.然后定义一个显示时间的元素,初始化配置后就可以看到计时啦

<body>
 <div id="countdown"></div>

 <script type="text/javascript" src="js/jquery-2.2.4.min.js"></script>
 <script type="text/javascript" src="js/jquery.countdown-1.0.0.min.js"></script>
 <script>
 $('#countdown').countdown({
 //活动开始时间 (可采用时间戳 或者 标准日期时间格式 "yyyy/MM/dd HH:mm:ss")
 //优先采取元素的data-stime值(该值只能为时间戳格式)
 startTime: '2016/6/11 17:54:00',//活动结束时间 (可采用时间戳 或者 标准日期时间格式 "yyyy/MM/dd HH:mm:ss")
 //优先采取元素的data-etime值(该值只能为时间戳格式)   
 endTime: '2016/6/11 17:55:00',
 //活动开始前倒计时的修饰
 //可自定义元素,例如"<span>距离活动开始倒计时还有:</span>"   
 beforeStart: '距离活动开始倒计时还有:',
 //活动进行中倒计时的修饰 
 //可自定义元素,例如"<span>距离活动截止还有:</span>" 
 beforeEnd: '距离活动截止还有:',
 //活动结束后的修饰
 //可自定义元素,例如"<span>活动已结束</span>"    
 afterEnd: '亲,活动结束啦,请继续关注哦!',
 //时间格式化(可采用"ddd:hh:mm:ss、 dd:hh:mm:ss、 hh:mm:ss、 mm:ss、 ss"等)     
 format: 'dd:hh:mm:ss',
 //活动结束后的回调函数     
 callback: function() {
  console.log('亲,活动结束啦,请继续关注哦!');
 }
 });
 </script>
 </body>

然后附上countdown插件的源代码,大神们看了不要见笑哈...

/**
 * 简单的jquery购物商城秒杀倒计时插件
 * @date 2016-06-11
 * @author TangShiwei
 * @email 591468061@qq.com
 */
;(function(factory) {
 "use strict";
 // AMD RequireJS
 if (typeof define === "function" && define.amd) {
  define(["jquery"], factory);
 } else {
  factory(jQuery);
 }
 })(function($) {
 "use strict";
 $.fn.extend({
  countdown: function(options) {
  if (options && typeof(options) !== 'object') {
  return false;
  }
  //默认配置
  var defaults = {
  //活动开始时间 (可采用时间戳 或者 标准日期时间格式 "yyyy/MM/dd HH:mm:ss")
  //优先采取元素的data-stime值(该值只能为时间戳格式)
  startTime: '2016/6/11 21:00:00',
  //活动结束时间 (可采用时间戳 或者 标准日期时间格式 "yyyy/MM/dd HH:mm:ss")
  //优先采取元素的data-etime值(该值只能为时间戳格式)   
  endTime: '2016/6/11 24:00:00',
  //活动开始前倒计时的修饰
  //可自定义元素,例如"<span>距离活动开始倒计时还有:</span>"   
  beforeStart: '距离活动开始倒计时还有:',
  //活动进行中倒计时的修饰 
  //可自定义元素,例如"<span>距离活动截止还有:</span>" 
  beforeEnd: '距离活动截止还有:',
  //活动结束后的修饰
  //可自定义元素,例如"<span>活动已结束</span>"    
  afterEnd: '活动已结束',
  //时间格式化(可采用"ddd:hh:mm:ss、 dd:hh:mm:ss、 hh:mm:ss、 mm:ss、 ss"等)     
  format: 'dd:hh:mm:ss',
  //活动结束后的回调函数     
  callback: function() {     
  return false;
  }
  };
  //根据时间格式渲染对应结构
  var strategies = {
  "4": function($this, timeArr, desc) {
  return $this.html(desc + '<span class="countdown-day">' + timeArr[0] + '</span>天' +  '<span class="countdown-hour">' + timeArr[1] + '</span>时' + '<span class="countdown-minute">' + timeArr[2] + '</span>分' + '<span class="countdown-second">' + timeArr[3] + '</span>秒');
  },
  "3": function($this, timeArr, desc) {
  return $this.html(desc + '<span class="countdown-hour">' + timeArr[0] + '</span>时' + '<span class="countdown-minute">' + timeArr[1] + '</span>分' + '<span class="countdown-second">' + timeArr[2] + '</span>秒');
  },
  "2": function($this, timeArr, desc) {
  return $this.html(desc + '<span class="countdown-minute">' + timeArr[0] + '</span>分' + '<span class="countdown-second">' + timeArr[1] + '</span>秒');
  },
  "1": function($this, timeArr, desc) {
  return $this.html(desc + '<span class="countdown-second">' + timeArr[0] + '</span>秒');
  }
  };
  /**
  * [killTime 时间差换算并进行格式化操作]
  * @param {[Object]} _this_ [jquery对象]
  * @param {[Number]} sTime [当前时间]
  * @param {[Number]} eTime [结束时间]
  * @param {[String]} desc [时间修饰]
  * @param {[String]} format [时间格式]
  * @return {[Function]} strategies [根据格式渲染对应结构]
  */
  var killTime = function(_this_, sTime, eTime, desc, format) {
  var diffSec = (eTime - sTime) / 1000;
  var map = {
  h: Math.floor(diffSec / (60 * 60)) % 24,
  m: Math.floor(diffSec / 60) % 60,
  s: Math.floor(diffSec % 60)
  };
  var format = format.replace(/([dhms])+/g, function(match, subExp) {
  var subExpVal = map[subExp];
  if (subExpVal !== undefined) {
   if (match.length > 1) {
   subExpVal = '0' + subExpVal;
   subExpVal = subExpVal.substr(subExpVal.length - match.length);
   return subExpVal;
   }
  } else if (subExp === 'd') {
   if (match.length >= 1 && match.length < 4) {
   map[subExp] = Math.floor(diffSec / (60 * 60 * 24));
   var d = '00' + map[subExp];
   return d.substr(d.length - match.length);
   }
  }
  return match;
  });
  //将时间格式通过":"符号进行分组
  var timeArr = String.prototype.split.call(format, ':');
  /**
  * [render 通过分组情况渲染对应结构]
  * @param {[Object]} _this_ [jquery对象]
  * @param {[Number]} timeArrLen [时间分组后的数组长度]
  * @param {[Array]} timeArr [时间分组后的数组]
  * @param {[String]} desc [时间修饰]
  * @return {[Function]} strategies [根据数组长度渲染对应结构]
  */
  var render = function(_this_, timeArrLen, timeArr, desc) {
  return strategies[timeArrLen](_this_, timeArr, desc);
  };
  render(_this_, timeArr.length, timeArr, desc);
  }
  //覆盖默认配置
  var opts = $.extend({}, defaults, options);
  return this.each(function() {
  var $this = $(this);
  var _timer = null;
  //优先采取元素的data-stime值(该值只能为时间戳格式)
  var sTime = $this.data('stime') ? parseInt($this.data('stime'), 10) : (new Date(opts.startTime)).getTime();
  //优先采取元素的data-etime值(该值只能为时间戳格式)
  var eTime = $this.data('etime') ? parseInt($this.data('etime'), 10) : (new Date(opts.endTime)).getTime();
  if (_timer) {
  clearInterval(_timer);
  }
  _timer = setInterval(function() {
  var nowTime = (new Date()).getTime();
  if (nowTime < sTime) {
   //活动暂未开始
   killTime($this, nowTime, sTime, opts.beforeStart, opts.format);
  } else if (nowTime >= sTime && nowTime <= eTime) {
   //活动进行中
   killTime($this, nowTime, eTime, opts.beforeEnd, opts.format);
  } else {
   //活动已结束
   clearInterval(_timer);
   $this.html(opts.afterEnd);
   if (opts.callback && $.isFunction(opts.callback)) {
   opts.callback.call($this);
   }
  }
  }, 1000);
  });
  }
 });
 });

 然后再来几个效果图吧:

基于jquery插件编写countdown计时器

精彩专题分享:js实现倒计时功能汇总

以上就是本文的全部内容,希望对大家学习jQuery有所帮助

Javascript 相关文章推荐
JavaScript省市联动实现代码
Feb 15 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
May 07 Javascript
使用jquery.upload.js实现异步上传示例代码
Jul 29 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
javascript自定义右键弹出菜单实现方法
May 25 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
Oct 15 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
JavaScript实现树的遍历算法示例【广度优先与深度优先】
Oct 26 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
js 图片懒加载的实现
Oct 21 Javascript
跨域请求的完美解决方法(JSONP, CORS)
Jun 12 #Javascript
浅谈jquery的map()和each()方法
Jun 12 #Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 #Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
Jun 12 #Javascript
使用Script元素发送JSONP请求的方法
Jun 12 #Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 #Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
Jun 12 #Javascript
You might like
Ajax PHP简单入门教程代码
2008/04/25 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
javascript innerHTML使用分析
2010/12/03 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
分享Python文本生成二维码实例
2016/01/06 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
Python 使用多属性来进行排序
2019/09/01 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
接受捐赠答谢词
2014/01/27 职场文书
家长写给孩子的评语
2014/04/18 职场文书
学校运动会报道稿
2014/09/23 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis