zoukankan      html  css  js  c++  java
  • 日历插件 备忘

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title>纯JS日历插件(注释全)</title>
        </head>
    
        <body>
            <input type="text" style="border:1px solid #999;" onclick="fPopCalendar(event,this,this)" onfocus="this.select()" readonly="readonly" />
        </body>
    
    </html>
    <script type="text/javascript">
        var gMonths = new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
        var WeekDay = new Array("", "", "", "", "", "", "");
        var strToday = "今天";
        var strYear = "";
        var strMonth = "";
        var strDay = "";
        var splitChar = "-";
        var startYear = 2000;
        var endYear = 2050;
        var dayTdHeight = 12;
        var dayTdTextSize = 12;
        var gcNotCurMonth = "#E0E0E0";
        var gcRestDay = "#FF0000";
        var gcWorkDay = "#444444";
        var gcMouseOver = "#79D0FF";
        var gcMouseOut = "#F4F4F4";
        var gcToday = "#444444";
        var gcTodayMouseOver = "#6699FF";
        var gcTodayMouseOut = "#79D0FF";
        var gdCtrl = new Object();
        var goSelectTag = new Array();
        var gdCurDate = new Date();
        var giYear = gdCurDate.getFullYear();
        var giMonth = gdCurDate.getMonth() + 1;
        var giDay = gdCurDate.getDate();
    
        function $() {
            var elements = new Array();
            for(var i = 0; i < arguments.length; i++) {
                var element = arguments[i];
                if(typeof(arguments[i]) == 'string') {
                    element = document.getElementById(arguments[i]);
                }
                if(arguments.length == 1) {
                    return element;
                }
                elements.Push(element);
            }
            return elements;
        }
        Array.prototype.Push = function() {
            var startLength = this.length;
            for(var i = 0; i < arguments.length; i++) {
                this[startLength + i] = arguments[i];
            }
            return this.length;
        }
        String.prototype.HexToDec = function() {
            return parseInt(this, 16);
        }
        String.prototype.cleanBlank = function() {
            return this.isEmpty() ? "" : this.replace(/s/g, "");
        }
    
        function checkColor() {
            var color_tmp = (arguments[0] + "").replace(/s/g, "").toUpperCase();
            var model_tmp1 = arguments[1].toUpperCase();
            var model_tmp2 = "rgb(" + arguments[1].substring(1, 3).HexToDec() + "," + arguments[1].substring(1, 3).HexToDec() + "," + arguments[1].substring(5).HexToDec() + ")";
            model_tmp2 = model_tmp2.toUpperCase();
            if(color_tmp == model_tmp1 || color_tmp == model_tmp2) {
                return true;
            }
            return false;
        }
    
        function $V() {
            return $(arguments[0]).value;
        }
    
        function fPopCalendar(evt, popCtrl, dateCtrl) {
            evt.cancelBubble = true;
            gdCtrl = dateCtrl;
            fSetYearMon(giYear, giMonth);
            var point = fGetXY(popCtrl);
            with($("calendardiv").style) {
                left = point.x + "px";
                top = (point.y + popCtrl.offsetHeight + 1) + "px";
                visibility = 'visible';
                zindex = '99';
                position = 'absolute';
            }
            $("calendardiv").focus();
        }
    
        function fSetDate(iYear, iMonth, iDay) {
            var iMonthNew = new String(iMonth);
            var iDayNew = new String(iDay);
            if(iMonthNew.length < 2) {
                iMonthNew = "0" + iMonthNew;
            }
            if(iDayNew.length < 2) {
                iDayNew = "0" + iDayNew;
            }
            gdCtrl.value = iYear + splitChar + iMonthNew + splitChar + iDayNew;
            fHideCalendar();
        }
    
        function fHideCalendar() {
            $("calendardiv").style.visibility = "hidden";
            for(var i = 0; i < goSelectTag.length; i++) {
                goSelectTag[i].style.visibility = "visible";
            }
            goSelectTag.length = 0;
        }
    
        function fSetSelected() {
            var iOffset = 0;
            var iYear = parseInt($("tbSelYear").value);
            var iMonth = parseInt($("tbSelMonth").value);
            var aCell = $("cellText" + arguments[0]);
            aCell.bgColor = gcMouseOut;
            with(aCell) {
                var iDay = parseInt(innerHTML);
                if(checkColor(style.color, gcNotCurMonth)) {
                    iOffset = (innerHTML > 10) ? -1 : 1;
                }
                iMonth += iOffset;
                if(iMonth < 1) {
                    iYear--;
                    iMonth = 12;
                } else if(iMonth > 12) {
                    iYear++;
                    iMonth = 1;
                }
            }
            fSetDate(iYear, iMonth, iDay);
        }
    
        function Point(iX, iY) {
            this.x = iX;
            this.y = iY;
        }
    
        function fBuildCal(iYear, iMonth) {
            var aMonth = new Array();
            for(var i = 1; i < 7; i++) {
                aMonth[i] = new Array(i);
            }
            var dCalDate = new Date(iYear, iMonth - 1, 1);
            var iDayOfFirst = dCalDate.getDay();
            var iDaysInMonth = new Date(iYear, iMonth, 0).getDate();
            var iOffsetLast = new Date(iYear, iMonth - 1, 0).getDate() - iDayOfFirst + 1;
            var iDate = 1;
            var iNext = 1;
            for(var d = 0; d < 7; d++) {
                aMonth[1][d] = (d < iDayOfFirst) ? (iOffsetLast + d) * (-1) : iDate++;
            }
            for(var w = 2; w < 7; w++) {
                for(var d = 0; d < 7; d++) {
                    aMonth[w][d] = (iDate <= iDaysInMonth) ? iDate++ : (iNext++) * (-1);
                }
            }
            return aMonth;
        }
    
        function fDrawCal(iYear, iMonth, iCellHeight, iDateTextSize) {
            var colorTD = " bgcolor='" + gcMouseOut + "' bordercolor='" + gcMouseOut + "'";
            var styleTD = " valign='middle' align='center' style='height:" + iCellHeight + "px;font-weight:bolder;font-size:" + iDateTextSize + "px;";
            var dateCal = "";
            dateCal += "<tr>";
            for(var i = 0; i < 7; i++) {
                dateCal += "<td" + colorTD + styleTD + "color:#990099'>" + WeekDay[i] + "</td>";
            }
            dateCal += "</tr>";
            for(var w = 1; w < 7; w++) {
                dateCal += "<tr>";
                for(var d = 0; d < 7; d++) {
                    var tmpid = w + "" + d;
                    dateCal += "<td" + styleTD + "cursor:pointer;' onclick='fSetSelected(" + tmpid + ")'>";
                    dateCal += "<span id='cellText" + tmpid + "'></span>";
                    dateCal += "</td>";
                }
                dateCal += "</tr>";
            }
            return dateCal;
        }
    
        function fUpdateCal(iYear, iMonth) {
            var myMonth = fBuildCal(iYear, iMonth);
            var i = 0;
            for(var w = 1; w < 7; w++) {
                for(var d = 0; d < 7; d++) {
                    with($("cellText" + w + "" + d)) {
                        parentNode.bgColor = gcMouseOut;
                        parentNode.borderColor = gcMouseOut;
                        parentNode.onmouseover = function() {
                            this.bgColor = gcMouseOver;
                        };
                        parentNode.onmouseout = function() {
                            this.bgColor = gcMouseOut;
                        };
                        if(myMonth[w][d] < 0) {
                            style.color = gcNotCurMonth;
                            innerHTML = Math.abs(myMonth[w][d]);
                        } else {
                            style.color = ((d == 0) || (d == 6)) ? gcRestDay : gcWorkDay;
                            innerHTML = myMonth[w][d];
                            if(iYear == giYear && iMonth == giMonth && myMonth[w][d] == giDay) {
                                style.color = gcToday;
                                parentNode.bgColor = gcTodayMouseOut;
                                parentNode.onmouseover = function() {
                                    this.bgColor = gcTodayMouseOver;
                                };
                                parentNode.onmouseout = function() {
                                    this.bgColor = gcTodayMouseOut;
                                };
                            }
                        }
                    }
                }
            }
        }
    
        function fSetYearMon(iYear, iMon) {
            $("tbSelMonth").options[iMon - 1].selected = true;
            for(var i = 0; i < $("tbSelYear").length; i++) {
                if($("tbSelYear").options[i].value == iYear) {
                    $("tbSelYear").options[i].selected = true;
                }
            }
            fUpdateCal(iYear, iMon);
        }
    
        function fPrevMonth() {
            var iMon = $("tbSelMonth").value;
            var iYear = $("tbSelYear").value;
            if(--iMon < 1) {
                iMon = 12;
                iYear--;
            }
            fSetYearMon(iYear, iMon);
        }
    
        function fNextMonth() {
            var iMon = $("tbSelMonth").value;
            var iYear = $("tbSelYear").value;
            if(++iMon > 12) {
                iMon = 1;
                iYear++;
            }
            fSetYearMon(iYear, iMon);
        }
    
        function fGetXY(aTag) {
            var oTmp = aTag;
            var pt = new Point(0, 0);
            do {
                pt.x += oTmp.offsetLeft;
                pt.y += oTmp.offsetTop;
                oTmp = oTmp.offsetParent;
            } while (oTmp.tagName.toUpperCase() != "BODY");
            return pt;
        }
    
        function getDateDiv() {
            var noSelectForIE = "";
            var noSelectForFireFox = "";
            if(document.all) {
                noSelectForIE = "onselectstart='return false;'";
            } else {
                noSelectForFireFox = "-moz-user-select:none;";
            }
            var dateDiv = "";
            dateDiv += "<div id='calendardiv' onclick='event.cancelBubble=true' " + noSelectForIE + " style='" + noSelectForFireFox + "position:absolute;z-index:99;visibility:hidden;border:1px solid #999999;'>";
            dateDiv += "<table border='0' bgcolor='#E0E0E0' cellpadding='1' cellspacing='1' >";
            dateDiv += "<tr>";
            dateDiv += "<td><input type='button' id='PrevMonth' value='<' style='height:20px;20px;font-weight:bolder;' onclick='fPrevMonth()'>";
            dateDiv += "</td><td><select id='tbSelYear' style='border:1px solid;' onchange='fUpdateCal($V("tbSelYear"),$V("tbSelMonth"))'>";
            for(var i = startYear; i < endYear; i++) {
                dateDiv += "<option value='" + i + "'>" + i + strYear + "</option>";
            }
            dateDiv += "</select></td><td>";
            dateDiv += "<select id='tbSelMonth' style='border:1px solid;' onchange='fUpdateCal($V("tbSelYear"),$V("tbSelMonth"))'>";
            for(var i = 0; i < 12; i++) {
                dateDiv += "<option value='" + (i + 1) + "'>" + gMonths[i] + "</option>";
            }
            dateDiv += "</select></td><td>";
            dateDiv += "<input type='button' id='NextMonth' value='>' style='height:20px;20px;font-weight:bolder;' onclick='fNextMonth()'>";
            dateDiv += "</td>";
            dateDiv += "</tr><tr>";
            dateDiv += "<td align='center' colspan='4'>";
            dateDiv += "<div style='background-color:#cccccc'><table width='100%' border='0' cellpadding='3' cellspacing='1'>";
            dateDiv += fDrawCal(giYear, giMonth, dayTdHeight, dayTdTextSize);
            dateDiv += "</table></div>";
            dateDiv += "</td>";
            dateDiv += "</tr><tr><td align='center' colspan='4' nowrap>";
            dateDiv += "<span style='cursor:pointer;font-weight:bolder;' onclick='fSetDate(giYear,giMonth,giDay)' onmouseover='this.style.color="" + gcMouseOver + ""' onmouseout='this.style.color="#000000"'>" + strToday + ":" + giYear + strYear + giMonth + strMonth + giDay + strDay + "</span>";
            dateDiv += "</tr></tr>";
            dateDiv += "</table></div>";
            return dateDiv;
        }
        with(document) {
            onclick = fHideCalendar;
            write(getDateDiv());
        }
    </script>
  • 相关阅读:
    ListBox的数据绑定
    GridView中加入新行方法
    一个事务的例子
    用sql语句查询从N条到M条的记录
    用户注册表中日期输入的解决方案
    对分页控件进行分页的封装
    我的触发器
    缓存DataSet以提高性能
    网站访问统计在Global.asax中的配置
    给表格控件绑定数据库内容的封装
  • 原文地址:https://www.cnblogs.com/yyy251/p/13576398.html
Copyright © 2011-2022 走看看