本文實(shí)例講述了jQuery實(shí)現(xiàn)的簡(jiǎn)單日歷組件定義與用法。分享給大家供大家參考,具體如下:
站在用戶的角度思考問題,與客戶深入溝通,找到成縣網(wǎng)站設(shè)計(jì)與成縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋成縣地區(qū)。
說到日歷組件,網(wǎng)上一搜一大堆,各種插件啊、集成框架啊實(shí)在不少。但是插件有的不合需求,框架嘛依賴關(guān)系一大堆,比如jQueryUI、bootstrap等。其實(shí)現(xiàn)在我就是想要一個(gè)輕量級(jí)的日歷組件,功能也不需要很強(qiáng)大,只要能兼容所有瀏覽器,能選擇任意年份日期和星期就可以了。
好了,廢話不多說,直接上代碼:
好了,先引入jQuery庫。(發(fā)表一下感概:angularJS的數(shù)據(jù)雙向綁定著實(shí)讓我對(duì)jQuery的未來擔(dān)憂了一陣子,不過jQuery畢竟存在的時(shí)間很久,API文檔和應(yīng)用方面實(shí)在太廣泛了 * _ *,而且jQuery無可厚非是一款相當(dāng)不錯(cuò)的DOM操作類庫,至少我覺得段時(shí)間內(nèi)這個(gè)地位無可動(dòng)搖。所以大家還是大膽地用吧!)
下面這個(gè)是還沒壓縮的js文件,純手寫哦 ^_^
/* * jquery extend: dateField * author:jafeney * createTime:2015-8-28 (很久之前寫的,拿出來炒下冷飯) */ jQuery.fn.extend({ dateField:function(options,callback){ var self=this, _self=$(this), _eventType=options.eventType || 'click', _style=options.style || 'default', _parent=$(this).parent(), _nowDate={ year:new Date().getFullYear(), month:new Date().getMonth()+1 }, _switchState=0, _monthArray=['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'], _daysArray=[31,28,31,30,31,30,31,31,30,31,30,31]; /*init*/ _self.on(_eventType,function(){ /*before use this extend,the '_self' must have a container*/ _self.parent().css('position','relative'); /*create element as dateField's container*/ var _container=$(""); var _header=$("" +""); var _body=$("" +"«" +""+_nowDate.year+"年"+_nowDate.month+"月" +"»" +"" +"" +"
- 日
- 一
- 二
- 三
- 四
- 五
- 六
"+self.getDays(_nowDate.year,_nowDate.month)+""); var _footer=$(" "); _container.append(_header).append(_body).append(_footer); _self.parent().append(_container); _self.parent().find('.dateField-container').show(); /*do callback*/ if(callback) callback(); }); /*some functions*/ /*get any year and any month's days into a list*/ self.getDays=function(year,month){ var _monthDay=self.getMonthDays(year,month); var _firstDay=new Date(year+'/'+month+'/'+'01').getDay(); //get this month's first day's weekday var returnStr=''; returnStr+="
下面是我 寫的簡(jiǎn)單的一套樣式風(fēng)格,有點(diǎn)模仿微信的風(fēng)格。
/*dateField styles*/ /*reset*/ ul,li{ list-style: none; padding:0; margin:0; } /*default*/ .dateField-container{ position:absolute; width:210px; border:1px solid rgb(229,229,229); z-index:99999; background:#fff; font-size:13px; margin-top:0px; cursor: pointer; display:none; } .dateField-header{ width:212px; position:relative; left:-1px; } .dateField-header-btns{ width:100%; height:30px; text-align:center; background:rgb(243,95,143); } .btn{ user-select:none; -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; } .dateField-header-btn-left{ float: left; display:block; width:30px; height:30px; color:#fff; line-height:30px; } .dateField-header-btn-left:hover{ background:rgb(238,34,102); } .dateField-header-datePicker{ display:inline-block; width:120px; text-align:center; color:#fff; line-height:30px; } .dateField-header-datePicker:hover{ background:rgb(238,34,102); } .dateField-header-btn-right{ float: right; width:30px; height:30px; display:block; color:#fff; line-height:30px; } .dateField-header-btn-right:hover{ background:rgb(238,34,102); } .dateField-header-week{ clear:both; width:100%; height:26px; } .dateField-header-week li{ float: left; width:30px; height:30px; line-height:30px; text-align:center; } .dateField-body{ width:100%; } .dateField-body-days{ clear: both; } .dateField-body-days li{ float: left; width:30px; height:30px; box-sizing:border-box; -webkit-box-sizing:border-box; -ms-box-sizing:border-box; -moz-box-sizing:border-box; border-top:1px solid rgb(229,229,229); border-right:1px solid rgb(229,229,229); line-height:30px; text-align:center; } .dateField-body-days li:hover{ color:#fff; background:rgb(243,95,143); } .dateField-body-days li.active{ color:#fff; background:rgb(243,95,143); } .dateField-body-days li.last{ border-right:0; } .dateField-footer{ border-top:1px solid rgb(229,229,229); clear:both; width:100%; height:26px; font-size:12px; } .dateField-footer-close{ margin-top:2px; display:inline-block; width:100%; height:22px; background:rgb(245,245,245); text-align: center; line-height:22px; } .dateField-footer-close:hover{ background:rgb(238,238,238); } .dateField-select{ user-select:none; -webkit-user-select:none; -ms-user-select:none; -moz-user-select:none; } .dateField-body-months{ } .dateField-body-months li{ width:70px; height:35px; line-height:35px; } .dateField-body-years li{ width:70px; height: 35px; line-height: 35px; }
到了最關(guān)鍵的時(shí)刻,怎么使用呢?嘿嘿,就2行代碼。
gitHub地址 https://github.com/Jafeney/dateField
感興趣的朋友還可使用如下在線工具測(cè)試上述代碼運(yùn)行效果:
在線HTML/CSS/JavaScript前端代碼調(diào)試運(yùn)行工具:
http://tools.jb51.net/code/WebCodeRun
在線HTML/CSS/JavaScript代碼運(yùn)行工具:
http://tools.jb51.net/code/HtmlJsRun
PS:這里再為大家推薦幾款時(shí)間及日期相關(guān)工具供大家參考:
在線日期/天數(shù)計(jì)算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi
在線日期天數(shù)差計(jì)算器:
http://tools.jb51.net/jisuanqi/onlinedatejsq
Unix時(shí)間戳(timestamp)轉(zhuǎn)換工具:
http://tools.jb51.net/code/unixtime
網(wǎng)頁萬年歷日歷:
http://tools.jb51.net/bianmin/webwannianli
更多關(guān)于jQuery相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《jQuery日期與時(shí)間操作技巧總結(jié)》、《jQuery拖拽特效與技巧總結(jié)》、《jQuery擴(kuò)展技巧總結(jié)》、《jQuery常見經(jīng)典特效匯總》、《jquery選擇器用法總結(jié)》及《jQuery常用插件及用法總結(jié)》
希望本文所述對(duì)大家jQuery程序設(shè)計(jì)有所幫助。