

在实际运用中,经常会使用到倒计时的效果。以下代码利用jQuery实现了一个倒计时计时器。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery倒计时实现</title>
<style type="text/css">
.shop_list ul li{
display: inline-block;
list-style: none;
width: 300px;
}
</style>
</head>
<body>
<p class="shop_list" id="shop_list">
<ul>
<li>
<img src="img/index/zixun1.jpg"/>
<p class="listItem">
<h5>小米手机 Note 顶配版</h5>
<p>全网通 香槟金 移动联通<br/>双4G手机 双卡双待</p>
<em>¥2998<i>起</i></em>
<span class="time" data-starttime="1445982375" data-endtime="1446350400"></span>
</p>
</li>
<li>
<img src="img/index/zixun1.jpg"/>
<p class="listItem">
<h5>小米手机 Note 顶配版</h5>
<p>全网通 香槟金 移动联通<br/>双4G手机 双卡双待</p>
<em>¥2998<i>起</i></em>
<span class="time" data-starttime='1445982375' data-endtime='1446350400'></span>
</p>
</li>
</ul>
</p>
</body>
<script type="text/javascript" src="js/lib/jquery-1.10.1.min.js" ></script>
<script type="text/javascript">
$(function(){
//找到商品列表以及时间显示span
var abj = $("#shop_list"),
timeObj = abj.find('.time');
//获取开始时间
var starttime = timeObj.data('starttime');
// 定时器函数
function actionDo(){
return setInterval(function(){
timeObj.each(function(index, el) {
//surplusTime为活动剩余开始时间
var t = $(this),
surplusTime = t.data('endtime') -starttime;
//若活动剩余开始时间小于0,则说明活动已开始
if (surplusTime <= 0) {
t.html("活动已经开始");
} else{
//否则,活动未开始,将剩余的时间转换成年,月,日,时,分,秒的形式
var year = surplusTime/(24*60*60*365),
showYear = parseInt(year),
month = (year-showYear)*12,
showMonth = parseInt(month),
day = (month-showMonth)*30,
showDay = parseInt(day),
hour = (day-showDay)*24,
showHour = parseInt(hour),
minute = (hour-showHour)*60,
showMinute = parseInt(minute),
seconds = (minute-showMinute)*60,
showSeconds = parseInt(seconds);
t.html("");
//设置jQuery短信倒计时功能的实现方法
1.点击按钮的时候,可以进行倒计时,倒计时自定义.2.当接收短信失败后,倒计时停止,可点击重新发送短信.3.点击的元素支持一般标签和input标签。看似很复杂其实实现代码很简单,下面小编给大家分享下实现代码,需要的朋友参考下吧。
实现的主要功能如下:
1.点击按钮的时候,可以进行倒计时,倒计时自定义。
2.当接收短信失败后,倒计时停止,可点击重新发送短信。
3.点击的元素支持一般标签和input标签。
html代码:
<input type="button" class="sameBtn btnCur" value="发送验证码"/> <p class="sameBtn btnCur2">发送验证码</p>
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);
}
});
})