标签:
之前一直只是在理论上学习jquery插件的开发。。。现在写了个倒计时的小插件尝试下,顺便重新温习下jquery插件的开发和写法:
倒计时效果:
首先是写取个常规的函数调用方法:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>倒计时</title>
<script src="../js/jquery.js"></script>
<script src="../js/jquery.Timer.js"></script>
</head>
<body>
<div class="wrap">
<div class="wrapCon1">
<p>
剩余时间:
<span class="day"></span>天
<span class="hours"></span>小时
<span class="minute"></span>分钟
<span class="second"></span>秒
</p>
</div>
</div>
</body>
<script>
$(function(){
setUpTimeDom.init({});//调用倒计时参数 DayDom,HourDom,MinDom,SecDom,endTime默认时间是2015/2/28 23:59:59,若要需要天数可在init({DayDom:false})
});
var setUpTimeDom ={
defaults:{
DayDom : ".day",
HourDom : ".hours",
MinDom : ".minute",
SecDom : ".second",
endTime : new Date(‘2015/2/28 23:59:59‘)//结束时间
},//默认参数值
//为小于10的数前面置零
checkTime:function(i){
if(i<10)
i = "0"+i;
return i;
},
//设置倒计时
setRemainingTime:function(){
var nowTime = new Date(); //开始时间
// endTime = new Date(‘2015/2/28 23:59:59‘),//结束时间
ts = "",
dd = "",
hh = "",
mm = "",
ss = "";
ts = this.defaults.endTime.getTime() -nowTime.getTime();//计算剩余的毫秒数
dd = parseInt(ts/1000/60/60/24,10);//计算剩余的天数
hh = parseInt(ts/1000/60/60%24,10);//计算剩余的小时数
mm = parseInt(ts/1000/60%60,10);//计算剩余的分钟数
ss = parseInt(ts/1000%60,10);//计算剩余的秒数
ts = setUpTimeDom.checkTime(ts);
dd = setUpTimeDom.checkTime(dd);
hh = setUpTimeDom.checkTime(hh);
mm = setUpTimeDom.checkTime(mm);
ss = setUpTimeDom.checkTime(ss);
if(this.defaults.DayDom)
$(this.defaults.DayDom).text(dd);
if(this.defaults.HourDom)
$(this.defaults.HourDom).text(hh);
if(this.defaults.MinDom)
$(this.defaults.MinDom).text(mm);
if(this.defaults.SecDom)
$(this.defaults.SecDom).text(ss);
setTimeout("setUpTimeDom.setRemainingTime()",1000);
},
init: function(options){
this.defaults = $.extend(this.defaults,options);
setUpTimeDom.setRemainingTime();
}
//初始化倒计时
}
</script>
</html>

写成插件形式:
html文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>倒计时</title>
<script src="../js/jquery.js"></script>
<script src="../js/jquery.Timer.js"></script>
</head>
<body>
<div class="wrap">
<div class="wrapCon2">
</div><!--放置倒计时区域-->
</div>
</body>
<script>
$(function(){
$(".wrapCon2").jqueryTimer({
endTime: new Date(‘2015/2/28 23:59:59‘),//设置结束时间
TLabel:{color:"red",fontWeight:"bold",fontSize:20},//设置标签样式
TimeValue:{fontSize:"20px"} //设置时间区域样式
});
});
</html>
js:命名:jquery.Timer.js
/*
*$.fn.jqueryTimer
*生成倒计时
*参数:
*DayDom boolean值 默认为true 开启剩余天数
*HourDom boolean值 默认为true 开启剩余小时
*MinDom boolean值 默认为true 开启剩余分钟
*SecDom boolean值 默认为true 开启剩余秒数
*endTime object值 设置结束时间 默认值为当前时间 赋值形式:endTime: new Date(‘2015/2/28 23:59:59‘)
*TLabel object值 设置标签样式 格式为jquery $().css(object)中的object同等
*TimeValue object值 设置时间区的样式 格式为jquery $().css(object)中的object同等
*/
;(function($){
$.fn.jqueryTimer = function(options){
var defaults = {
DayDom: true,
HourDom: true,
MinDom: true,
SecDom: true,
endTime: new Date(),//结束时间
TLabel : {},//标签样式
TimeValue: {}//倒计时样式
},//默认参数值
$lastTimeDom = ‘‘;
defaults = $.extend(defaults,options);
$(this).append("<div class=‘lastTime‘><p></p></div>");//生成倒计时节点
$lastTimeDom = $(this).find(".lastTime p");
setDom = function(){
if(defaults.DayDom){
$lastTimeDom.append("<span class=‘day TimeValue‘></span><span class=‘DayLabel TLabel‘>天</span>");
}//是否开启天数
if(defaults.HourDom){
$lastTimeDom.append("<span class=‘hours TimeValue‘></span><span class=‘HoursLabel TLabel‘>小时</span>");
}//是否开启小时
if(defaults.MinDom){
$lastTimeDom.append("<span class=‘minute TimeValue‘></span><span class=‘MinLabel TLabel‘>分</span>");
}//是否开启分钟
if(defaults.SecDom){
$lastTimeDom.append("<span class=‘second TimeValue‘></span><span class=‘SecLabel TLabel‘>秒</span>");
}//是否开启秒
if(defaults.TLabel){
$lastTimeDom.find(".TLabel").css(defaults.TLabel);
}//设置标签样式
if(defaults.TimeValue){
$lastTimeDom.find(".TimeValue").css(defaults.TimeValue);
}//设置时间区的样式
}
checkTime = function(i){
if(i<10)
i = "0"+i;
return i;
},
//为小于10的数前面置零
setRemainingTime = function(){
var nowTime = new Date(), //开始时间
// endTime = new Date(‘2015/2/28 23:59:59‘),//结束时间
ts = "",
dd = "",
hh = "",
mm = "",
ss = "";
ts = defaults.endTime.getTime() -nowTime.getTime();//计算剩余的毫秒数
dd = parseInt(ts/1000/60/60/24,10);//计算剩余的天数
hh = parseInt(ts/1000/60/60%24,10);//计算剩余的小时数
mm = parseInt(ts/1000/60%60,10);//计算剩余的分钟数
ss = parseInt(ts/1000%60,10);//计算剩余的秒数
ts = this.checkTime(ts);
dd = this.checkTime(dd);
hh = this.checkTime(hh);
mm = this.checkTime(mm);
ss = this.checkTime(ss);
if(defaults.DayDom){
$(defaults.DayDom).text(dd);
}
if(defaults.HourDom){
$(defaults.HourDom).text(hh);
}
if(defaults.MinDom){
$(defaults.MinDom).text(mm);
}
if(defaults.SecDom){
$(defaults.SecDom).text(ss);
}
setTimeout("setRemainingTime()",1000);
},
// 设置倒计时
setDom();//生成节点
setRemainingTime();//调用
return this;//支持链式操作
}
})(jQuery);

总结:第一种耦合性强,复用性差
第二种复用性强;用法:$().jqueryTimer({});
编写jQuery插件可以充分利用库,将公用的函数抽象出来,“循环利用”。以下是简短的总结:
参考:http://www.cnblogs.com/playerlife/archive/2012/05/11/2495269.html
标签:
原文地址:http://www.cnblogs.com/hanbingljw/p/4250769.html