基于jQuery日歷插件制作日歷
來(lái)看下最終效果圖吧:

是長(zhǎng)得丑了一點(diǎn),不要吐槽我-。-
首先來(lái)說(shuō)說(shuō)這個(gè)日歷主要的制作邏輯吧:
·一個(gè)月份最多有31天,需要一個(gè)7X6的表格去裝載
·如果知道了某個(gè)月份1號(hào)是星期幾,這個(gè)月份有多少天,一個(gè)循環(huán)就可以顯示某個(gè)月的日歷了吧(眼睛都放光了*.*)
·加上一些控件讓用戶可以方便操作吧(比如可以輸入年份、月份,可以點(diǎn)擊選擇年份、月份)
新建一個(gè)html文件,html結(jié)構(gòu):
<div class="container"> <input type="text" value="" id="cal-input"/> <div class="cal-box"> <table> <thead> <tr> <td class="sun">日</td> <td>一</td> <td>二</td> <td>三</td> <td>四</td> <td>五</td> <td class="sta">六</td> </tr> </thead> <tbody> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> </div> </div>
再加點(diǎn)樣式進(jìn)去,打開(kāi)瀏覽器看看效果:
thead td,tbody td{
width: 20px;
height: 20px;<br><span class="styles-clipboard-only"> <span class="webkit-css-property">text-align: <span class="expand-element"><span class="value">center;</span></span></span></span>
}
thead td.sun,thead td.sta{
color: #eec877;
}
tbody td{
border: 1px solid #eee;
}

看起來(lái)還不錯(cuò),但是這是一個(gè)插件,要寫(xiě)這么多html的代碼是不合理的,應(yīng)該是在這個(gè)插件內(nèi)部動(dòng)態(tài)插入的,這樣寫(xiě)也是為了直觀演示。
要開(kāi)始寫(xiě)JS代碼了,現(xiàn)在要得知某月的1號(hào)是星期幾,方便去遍歷顯示某月的日歷出來(lái),這里用到了蔡勒公式
PS:簡(jiǎn)單解釋一下,蔡勒公式:var week = y + parseInt(y/4) + parseInt(c/4) - 2*c + parseInt(26*(m+1)/10) + d - 1;
c是年份的前兩位,y是年份的后兩份(2016年,c是20,y就是16),m是月份,d是日期,把week%7后得出的結(jié)果就是星期幾
但是1,2月要當(dāng)成上一年的13,14月進(jìn)行計(jì)算,比如2016.2.3,就要換算成2015.14.3來(lái)使用蔡勒公式
week是正數(shù)和負(fù)數(shù)時(shí)求模是不一樣的,負(fù)數(shù)時(shí)要 (week%7+7)%7,正數(shù)時(shí)直接求模 week%7,
還有得知道這個(gè)月份有多少天,1、3、5、7、8、10、12月是31天,4、6、9、11月是30天,2月分閏年和平年,平年是28天,閏年是29天,閏年是能被4整除但不能被100整除的,好了有了些前提下,還是能很快寫(xiě)出JS的
$(function(){
var $td = $('tbody').find('td');
var date = new Date(),
year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate(),days;
function initCal(yy,mm,dd){
if(mm ==2 && yy%4 == 0 && yy%100 !==0 ){
days = 28;
}else if(mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12){
days = 31;
}else if(mm==4 || mm==6 || mm==9 || mm==11 ){
days = 30;
}else{
days = 29;
}
var m = mm < 3 ? (mm == 1 ? 13 : 14): mm;
yy = m > 12 ? yy - 1 : yy;
var c = Number(yy.toString().substring(0,2)),
y = Number(yy.toString().substring(2,4)),
d = 1;
//蔡勒公式
var week = y + parseInt(y/4) + parseInt(c/4) - 2*c + parseInt(26*(m+1)/10) + d - 1;
week = week < 0 ? (week%7+7)%7 : week%7;
for(var i=0 ;i<42;i++){
$td.eq(i).text(''); //清空原來(lái)的text文本
}
for(var i = 0;i < days; i++){
$td.eq( week % 7 +i).text(i+1);
}
}
initCal(year,month,day);
})
再打開(kāi)瀏覽器看看,現(xiàn)在的日歷是長(zhǎng)這樣

打開(kāi)手機(jī)日歷看一看,現(xiàn)在是16年3月,嗯,長(zhǎng)得一毛一樣(得意臉)
現(xiàn)在要添加一些控件進(jìn)去,兩個(gè)輸入框和四個(gè)按鍵,按鍵是使用了iconfont,html代碼如下:
<div class="container"> <input type="text" value="" id="cal-input"/> <div class="cal-box"> <div class="cal-control-box"> <div class="wif iw-bofangqixiayiqu left"></div> <div class="wif iw-iconfont-bofang left"></div> <input type="" value=""/> <span>年</span> <input type="" value=""/> <div class="wif iw-iconfont-bofang right"></div> <div class="wif iw-bofangqixiayiqu right"></div> </div> <table> <thead> <tr> <td class="sun">日</td> <td>一</td> <td>二</td> <td>三</td> <td>四</td> <td>五</td> <td class="sta">六</td> </tr> </thead> <tbody> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> </div> </div>
現(xiàn)在的日歷是長(zhǎng)這樣子了

現(xiàn)在來(lái)給按鍵們都綁上點(diǎn)擊事件,輸入框綁上change事件
//更改月份按鈕
$(document).on("click",".iw-iconfont-bofang",function(){
if($(this).hasClass("left")){
//判斷加還是減
if(month == 1 ){
month = 12;
year--;
}else{
month--;
}
}else{
if(month == 12){
month = 1;
year ++;
}else{
month ++;
}
}
initCal(year,month,day);
})
//更改年份
$(document).on("click",".iw-bofangqixiayiqu",function(){
if($(this).hasClass("left")){
year--;
}else{
year++;
}
initCal(year,month,day);
})
//年份輸入
$(document).on("change","input.cal-year",function(){
year = $(this).val();
initCal(year,month,day);
})
//月份輸入
$(document).on("change","input.cal-month",function(){
month = $(this).val();
initCal(year,month,day);
})
順便在initCal()函數(shù)里面要把年份和月份的值用JQ的val()方法,放進(jìn)input框里面就ok啦
結(jié)束語(yǔ):這里呢并沒(méi)有寫(xiě)成一個(gè)插件的形式,但是把這個(gè)日歷的實(shí)現(xiàn)主要思路寫(xiě)好了,最近也是忙著寫(xiě)畢業(yè)論文,還有挺多東西想寫(xiě)下來(lái)分享的,總是感覺(jué)時(shí)間不夠用,下次寫(xiě)一下怎么將這個(gè)日歷寫(xiě)成一個(gè)chrome插件,就是下面這個(gè)

希望本文所述對(duì)jquery程序設(shè)計(jì)有所幫助。
- 基于jquery日歷價(jià)格、庫(kù)存等設(shè)置插件
- 學(xué)習(xí)使用jQuery表單驗(yàn)證插件和日歷插件
- Jquery Easyui日歷組件Calender使用詳解(23)
- jquery網(wǎng)頁(yè)日歷顯示控件calendar3.1使用詳解
- jquery日歷插件e-calendar升級(jí)版
- jQuery日歷插件datepicker用法詳解
- JQuery日歷插件My97DatePicker日期范圍限制
- 基于jquery實(shí)現(xiàn)日歷簽到功能
- jQuery支持添加事件的日歷特效代碼分享(3種樣式)
- jQuery實(shí)現(xiàn)簡(jiǎn)單日歷效果
相關(guān)文章
通過(guò)Jquery.cookie.js實(shí)現(xiàn)展示瀏覽網(wǎng)頁(yè)的歷史記錄超管用
本文給大家分享利用cookie插件獲取用戶瀏覽文章或者是網(wǎng)頁(yè)的歷史記錄,并把用戶最近瀏覽過(guò)的信息顯示在頁(yè)面,涉及到 jquery.cookie.js相關(guān)知識(shí),感興趣的朋友可以參考下2015-10-10
jQuery實(shí)現(xiàn)復(fù)制到粘貼板功能
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)復(fù)制到粘貼板功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
jquery入門(mén)—選擇器實(shí)現(xiàn)隔行變色實(shí)例代碼
JQuery入門(mén)—選擇器實(shí)現(xiàn)隔行變色如何實(shí)現(xiàn)呢?JQuery選擇器繼承了CSS、path語(yǔ)音的部分語(yǔ)法,允許通過(guò)標(biāo)簽名、屬性名、內(nèi)容對(duì)DOM元素進(jìn)行快速、準(zhǔn)確的選擇,接下來(lái)詳細(xì)介紹,需要的朋友可以參考下2013-01-01
jquery+easeing實(shí)現(xiàn)仿flash的載入動(dòng)畫(huà)
本文主要給大家講述的是如何使用jquery+easeing實(shí)現(xiàn)仿flash的載入動(dòng)畫(huà)的方法,附上示例代碼,非常細(xì)致全面,這里推薦給大家,希望對(duì)大家熟練使用jQuery有所幫助。2015-03-03
jQuery使用siblings獲取某元素所有同輩(兄弟姐妹)元素用法示例
這篇文章主要介紹了jQuery使用siblings獲取某元素所有同輩(兄弟姐妹)元素用法,結(jié)合簡(jiǎn)單實(shí)例形式分析了siblings()函數(shù)獲取同輩元素的操作技巧,需要的朋友可以參考下2017-01-01
jQuery EasyUI 獲取tabs的實(shí)例解析
左邊tree,右邊tabs。點(diǎn)擊tree增加相應(yīng)的tabs。下面通過(guò)一段代碼給大家解析,需要的朋友參考下吧2016-12-12
jquery根據(jù)一個(gè)值來(lái)選中select下的option實(shí)例代碼
下面小編就為大家?guī)?lái)一篇jquery根據(jù)一個(gè)值來(lái)選中select下的option實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
基于jquery編寫(xiě)的橫向自適應(yīng)幻燈片切換特效的實(shí)例代碼
全屏自適應(yīng)jquery焦點(diǎn)圖切換特效,在IE6這個(gè)瀏覽器兼容性問(wèn)題上得到了和諧,兼容IE6,適用瀏覽器:IE6、IE7、IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.相關(guān)代碼2013-08-08
jQuery 復(fù)合選擇器應(yīng)用的幾個(gè)例子
這篇文章主要介紹了jQuery 復(fù)合選擇器應(yīng)用的幾個(gè)例子,本文例子所引用的jQuery版本為 jQuery-1.8.3.min.js,喜歡的朋友可以學(xué)習(xí)下2014-09-09
JQuery將字符串轉(zhuǎn)為json對(duì)象的四種方法
本文主要介紹了JQuery將字符串轉(zhuǎn)為json對(duì)象的四種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

