又一款自己寫原創Jquery時間插件

dengjianbin 12年前發布 | 35K 次閱讀 jQuery日期插件 jQuery插件 jQuery

原創時間Jquery插件功能很強大,使用方便,代碼簡潔,很適合網友們學習,參數配置靈活

 

配置如下:
var defaults = {
   IcoClass : "jcDateIco", //圖標樣式名稱
   Event : "click",        //響應的事件
   Speed : 100,            //出現的速度
   Left : 0,    //靠左的位置
   Top : 22,    //靠上的位置
   format : "/",   //日期連接字符
   Timeout : 100           //關閉時間
  };
 
效果如下:
 
Jquery插件,Jquery資源,Jquery特效,div+css
Jquery插件,Jquery資源,Jquery特效,div+css
Jquery插件,Jquery資源,Jquery特效,div+css

插件源代碼如下:
;(function($){
    $.fn.jcDate = function(options) {
        var defaults = {
            IcoClass : "jcDateIco", //圖標樣式名稱
            Event : "click",        //響應的事件
            Speed : 100,            //出現的速度
            Left : 0,               //靠左的位置
            Top : 22,               //靠上的位置
            format : "/",           //日期連接字符
            Timeout : 100           //關閉時間
        };
        var options = $.extend(defaults,options);
        return this.each(function() {
            if($("#jcDate").length == 0){
                $("body").prepend("<div id='jcDate'><input type='hidden' value='' id='dateHideText' /><div id='jcDateTt'><a id='d_prev'></a><div><span></span><b>年</b><samp></samp><b>月</b></div><a id='d_next'></a></div><dl id='jcYeas'></dl><dl id='jcMonth'></dl><div id='jcDayWrap'><dl id='jcDayCon'></dl><div id='jcDateMax'><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul><ul></ul></div><div id='jcDateBtn'><samp>今天</samp><span>清空</span><a id='d_sub'>確定</a><div id='jcTimeWrap'><input type='text' value='' /><label>:</label><input type='text' value='' /></div></div></div></div>");
            };

            var $dateInput = $(this),
                 $window = $(window),
                 dateObj = new Date(),
                 $jcDate = $("#jcDate"),
                 inputOffLeft = $(this).offset().left,
                 inputOfftop = $(this).offset().top,
                 $year = $("#jcDateTt").find("span"),
                 $month = $("#jcDateTt").find("samp"),
                 $b = $("#jcDateTt").find("b"),
                 $jcDateMax = $("#jcDateMax"),
                 $weekFrame = $("#jcDayCon"),
                 $DateBtn = $("#jcDateBtn"),
                 $jcYeas = $("#jcYeas"),
                 $jcMonth = $("#jcMonth"),
                 $Now = $DateBtn.find("samp"),
                 $clear = $DateBtn.find("span"),
                 $jcDayWrap = $("#jcDayWrap"),
                 $dayFrame = $jcDayWrap.find("ul"),
                 $submit = $DateBtn.find("a#d_sub"),
                 $HiddenText = $("input#dateHideText"),
                 $jcTimeWrap = $("#jcTimeWrap"),
                 $hh = $jcTimeWrap.find("input:eq(0)"),
                 $mm = $jcTimeWrap.find("input:eq(1)"),
                 $d_prev = $("#d_prev"),
                 $d_next = $("#d_next"),
                 // 獲取當前時間
                 _year = parseInt(dateObj.getFullYear()),
                 _month = dateObj.getMonth() + 1,
                 _date = dateObj.getDate(),
                 week = dateObj.getDay(),
                 days = [ "日","一 ","二 ","三 ","四 ","五 ","六 "],
                 _day = days[week],
                 _hours = dateObj.getHours(),
                 _minutes = dateObj.getMinutes(),
                 weekDl = "",
                 yearDl = "<dd class='visited'>"+_year+"年"+"</dd>",
                 monthDl = "",
                 $ul = "",
                 _idx = 0,
                 defInfo = "",
                 getDateCount = function(y, m){
                     return [31, y % 4 == 0 && y % 100 != 0  || y % 400 == 0 ? 29 : 28 ,31,30,31,30,31,31,30,31,30,31][ m+1 ];
                 };
            // 賦值數據 
            $hh.val("00");
            $mm.val("00");
            for(var w = 0 in days) {
                weekDl = weekDl + "<dt>" + days[w] + "</dt>";
            };
            $weekFrame.html(weekDl);
            var NowY = _year,
                yArr = new Array(),
                mArr = new Array();
            for(var lys = 0; lys < 9 ; lys++ ){
                lastyear = NowY - (lys+1);
                yArr.push("<dt>"+lastyear+"年"+"</dt>")
            };
            yArr.reverse();
            var dtf = ysArr(yArr);
            yArr.length = 0;
            for(var fys = 0; fys < 8 ; fys++ ){
                firstyear = NowY + (fys+1);
                yArr.push("<dt>"+firstyear+"年"+"</dt>")
            };
            var dtl = ysArr(yArr);
            $jcYeas.html(dtf+yearDl+dtl);
            function ysArr(arr){
                var $Dts = "";
                for(var index = 0 in arr){
                    $Dts = $Dts + arr[index];
                };
                return $Dts
            };
            for(var ms = 1; ms <= 12; ms++ ){
                if(ms == _month){
                    mArr.push("<dt class='visited'>" + ms + "月" +"</dt>");
                } else {
                    mArr.push("<dt>" + ms + "月" +"</dt>");
                };
            };
            for(var mA = 0 in mArr){
                monthDl += mArr[mA];
            };
            $jcMonth.html(monthDl)
            function shFade(show,hide,hide2,bool,index){
                var fadeSpeed = options.speed;
                hide.fadeOut(fadeSpeed);
                hide2.fadeOut(fadeSpeed);
                show.delay(fadeSpeed*2).fadeIn(fadeSpeed);
                if(bool){
                    $("#d_prev,#d_next").fadeOut(fadeSpeed);
                    $b.eq(index).hide();
                } else {
                    $("#d_prev,#d_next").fadeIn(fadeSpeed);
                    $b.show();
                    $year.show();
                    $month.show();
                };
            };
            $year.die().live("click",function(){
                $(this).addClass("visited").next("samp").removeClass("visited");
                shFade($jcYeas,$jcDayWrap,$jcMonth,true,1);
                $year.show();
                $month.hide();
            });
            $("#jcYeas dd,#jcYeas dt").die().live("click",function(){
                var y = parseInt($(this).text());
                Traversal(y);
                $year.text(y);
                shFade($jcDayWrap,$jcYeas,$jcMonth,false);
            });
            $month.die().live("click",function(){
                $(this).addClass("visited").prev().removeClass("visited");
                shFade($jcMonth,$jcDayWrap,$jcYeas,true,0); 
                $month.show();
                $year.hide();
            });
            $jcMonth.find("dt").die().live("click",function(){
                var m = parseInt($(this).text());
                mAnimate(m-1);
                $month.text(m);
                shFade($jcDayWrap,$jcYeas,$jcMonth,false);
            });
            function Traversal(Ty){
                $year.text(Ty);
                for(var m = 0; m < $dayFrame.length; m++){
                    var dayLi = "",
                        $fLi = "",
                        $lLi = "",
                        firstLi = "",
                        lastDay = 0,
                        yearWeek = new Date(Ty,m,1).getDay();
                    getDateCount(Ty,m-2) == undefined ? fristDay = 31 : fristDay = getDateCount(Ty,m-2);
                    for(var d = 1; d <= getDateCount(Ty,m-1); d++){
                        dayLi = dayLi + "<li class='jcDateColor'>"+ d +"</li>";
                    };
                    for(var f = 0 ; f < yearWeek; f++){
                        firstLi += "<li>"+ fristDay +"</li>,";
                        fristDay--;
                    };
                    for(var l = 0 ; l <= 42-(d+yearWeek); l++ ){
                        lastDay = l + 1;
                        $lLi += "<li>"+lastDay+"</li>";
                    };
                    fLiArr = firstLi.split(",").reverse();
                    for(var arr = 0 in fLiArr){
                        $fLi += fLiArr[arr];
                    };
                    $addLi = $fLi + dayLi + $lLi;
                    $dayFrame.eq(m).html($addLi);

                };
            };
            mAnimate(_month-1);
            //功能方法
            $d_prev.die().live("click",function(){
                _idx = $dayFrame.filter(".dateV").index();
                if( _idx > 0){
                    _idx --;
                } else {
                    var _Tyear = parseInt($year.text());
                    _Tyear--;
                    Traversal(_Tyear);
                    _idx = $dayFrame.length-1;
                };
                mAnimate(_idx);
            });
            $d_next.die().live("click",function(){
                _idx = $dayFrame.filter(".dateV").index();
                if( _idx < $dayFrame.length-1){
                    _idx ++;
                } else {
                    var _Tyear = parseInt($year.text());
                    _Tyear++;
                    Traversal(_Tyear);
                    _idx = 0;
                };
                mAnimate(_idx);     
            });
            function mAnimate(index){
                $dayFrame.eq(index).addClass("dateV").siblings().removeClass("dateV");
                $month.text(index+1);
                $jcDateMax.animate({ "left":-index*161 },options.Speed);
            };
            function today(y,m,d){
                $year.text(y);
                $month.text(m);
                Traversal(y);
                $.each($dayFrame.eq(m-1).find("li"),function(){
                    if($(this).hasClass("jcDateColor")){
                        $dayFrame.eq(m-1).find("li.jcDateColor").eq(d-1).addClass("visited");
                    };
                });
                $HiddenText.val(_date);
                $dayFrame.eq(m-1).find("li").text();
                mAnimate(m-1);
            };
            function clearVisited(){
                $.each($("li.jcDateColor",$dayFrame),function(){
                    if($(this).hasClass("visited")){
                        $(this).removeClass("visited");
                    };                                        
                });
            };
            today(_year,_month,_date);
            $dayFrame.undelegate("li.jcDateColor","click").delegate("li.jcDateColor","click",function(){
                clearVisited();
                $(this).addClass("visited");
                $HiddenText.val(parseInt($(this).text()))
            });
            $dayFrame.undelegate("li.jcDateColor","dblclick").delegate("li.jcDateColor","click",function(){
                submitDate();
            });
            $Now.die().live("click",function(){
                today(_year,_month,_date);               
            });
            $clear.die().live("click",function(){
                $("input.dateVisited").val("");
            });
            $submit.die().live("click",function(){
                submitDate();
            });
            function submitDate(){
                var Sy = $year.text(),
                    Sm = $month.text(),
                    Sd = $HiddenText.val();
                NowDateArr = new Array(Sy,Sm,Sd);
                dateInfo =NowDateArr.join(options.format);
                if($hh.val() != "00" || $mm.val() != "00" ){
                    var Sh = $hh.val(),
                        Sm = $mm.val();
                    NowDateArr.push(Sh+":"+Sm);
                    printDate = NowDateArr.join(options.format).substring(),
                    format = printDate.split("/");
                    dateInfo = format[0]+options.format+format[1]+options.format+format[2]+" "+format[3]
                };
                $("input.dateVisited").val(dateInfo);
                closeDate();
            };
            $dateInput.addClass(options.IcoClass)
                      //.val(defInfo)
                      .die()
                      .live(options.Event,function(e){
                          $(this).addClass("dateVisited");
                          //$jcDate.css({ "left" : e.pageX+(options.Left),"top" : e.pageY+(options.Top) });
                          var iof = $(this).offset();
                          $jcDate.css({ "left" : iof.left+options.Left,"top" : iof.top+options.Top });
                          $jcDate.show(options.Speed);
                          $jcDayWrap.show();
                          $jcYeas.hide();
                          $jcMonth.hide();
                          $("#d_prev,#d_next").show();
                          $year.show();
                          $month.show();
                          $b.show();
                      });
            $jcDate.die().live("mouseleave",function(){
                setTimeout(closeDate,options.Timeout);
            });
            function closeDate(){
                $("input.dateVisited").removeClass("dateVisited");
                $jcDate.hide(options.Speed);
            };
        });
    };
})(jQuery)
在線演示和下載
 本文由用戶 dengjianbin 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!