自己手写日历

下面是一段网上粗糙的代码,我加以改进,主要是为了研究为主

<html>
<meta  http-equiv="content-type" content="text/html;charset=utf-8">
<head>
    <style type="text/css">
        td{ text-align: center;}
    </style>
    <script type="text/javascript">
        function ready(fn){
            // 目前Mozilla、Opera和webkit 525+内核支持DOMContentLoaded事件
            if(document.addEventListener) {
                document.addEventListener('DOMContentLoaded', function() {
                    document.removeEventListener('DOMContentLoaded',arguments.callee, false);
                    fn();
                }, false);
            }
            // 如果IE
            else if(document.attachEvent) {
                // 确保当页面是在iframe中加载时,事件依旧会被安全触发
                document.attachEvent('onreadystatechange', function() {
                    //alert(arguments.callee);
                    if(document.readyState == 'complete') {
                        document.detachEvent('onreadystatechange', arguments.callee);
                        fn();
                    }
                });
                // 如果是IE且页面不在iframe中时,轮询调用doScroll 方法检测DOM是否加载完毕
                if(document.documentElement.doScroll && typeof window.frameElement === "undefined") {
                    //alert(arguments.callee);
                    try{
                        document.documentElement.doScroll('left');
                    }
                    catch(error){
                        return setTimeout(arguments.callee, 20);
                    };
                    fn();
                }
            }
        };

        ready(function(){
            var Calender=function(){
                //this.Init.apply(this,arguments);
                this.Init.apply(this,arguments);
            }
            Calender.prototype={
                Init:function(container,options){
                    this.date=new  Date();
                    //当前年
                    this.year=this.date.getFullYear();
                    //当前月
                    this.month=this.date.getMonth()+1;
                    //当前天
                    this.day=this.date.getDate();
                    //选中项是星期几
                    this.week=this.date.getDay();
                    //获取每个月第一周开始是星期几
                    this.weekstart=this.getWeekDay(this.year, this.month-1, 1);
                    //当月有多少天
                    this.monthdays= this.getMonthDays(this.year,this.month);
                    //日历容器
                    this.containerDiv=document.getElementById(container);
                    //默认日历样式
                    this.options=options!=null?options:{
                        border:'1px solid green',
                        width:'400px',
                        height:'200px',
                        backgroundColor:'lightgrey',
                        fontColor:'blue'
                    }
                },
                getMonthDays:function(year,month){
                    var date=new Date(year,month,0);
                    console.log(date);
                    return date.getDate();
                },
                getWeekDay:function(year,month,day){
                    var date=new Date(year,month,day);
                    return date.getDay();
                },
                View:function(){
                    var  tablestr='<table>';
                    tablestr+='<tr><td colspan="3"></td><td>年:'+this.year+'</td><td colspan="3">月:'+this.month+'</td></tr>';
                    tablestr+='<tr><td width="14%">日</td><td width="14%">一</td><td width="14%">二</td><td width="14%">三</td><td width="14%">四</td><td width="14%">五</td><td width="14%">六</td></tr>';
                    var  index=1;
                    //判断每月的第一天在哪个位置
                    var  style='';
                    if(this.weekstart<7)
                    {
                        tablestr+='<tr>';
                        for (var i = 0; i <this.weekstart; i++) {
                            tablestr+='<td></td>';
                        };
                        for (var i = 0; i < 7-this.weekstart; i++) {
                            style=this.day==(i+1)?"background-Color:green;":"";
                            index++;
                            tablestr+='<td style="'+style+'" val='+(this.year+'-'+this.month+'-'+(i+1))+'>'+(i+1)+'</td>';
                        };
                        tablestr+='</tr>';
                    }
                    ///剩余天数对应的位置

                    //判断整数行并且对应相应的位置
                    var remaindays=this.monthdays-(7-this.weekstart);
                    var row=Math.floor(remaindays%7==0?remaindays/7:((remaindays/7)+1))  ;
                    var count=Math.floor(remaindays/7);
                    for (var i = 0; i < count; i++) {
                        tablestr+='<tr>';
                        for (var k = 0; k < 7; k++) {
                            style=this.day==(index+k)?"background-Color:green;":"";
                            tablestr+='<td style="'+style+'" val='+(this.year+'-'+this.month+'-'+(index+k))+'>';
                            tablestr+=index+k;
                            tablestr+='</td>';
                        };
                        tablestr+='</tr>';
                        index+=7;
                    };

                    //最后剩余的天数对应的位置(不能填充一周的那几天)
                    var remaincols=this.monthdays-(index-1);
                    tablestr+='<tr>';
                    for(var i = 0; i < remaincols; i++) {
                        style=this.day==index?"background-Color:green;":"";
                        tablestr+='<td style="'+style+'" val='+(this.year+'-'+this.month+'-'+(index))+'>';
                        tablestr+=index;
                        tablestr+='</td>';
                        index++;
                    };
                    tablestr+='</tr>';
                    tablestr+='</table>';
                    return  tablestr;
                },
                Render:function(){
                    var calenderDiv=document.createElement('div');
                    calenderDiv.style.border=this.options.border;
                    calenderDiv.style.width=this.options.width;
                    calenderDiv.style.height=this.options.height;
                    calenderDiv.style.cursor='pointer';
                    calenderDiv.style.backgroundColor=this.options.backgroundColor;
                    // calenderDiv.style.color=this.options.fontColor;
                    calenderDiv.style.color='red' ;

                    calenderDiv.οnclick=function(e){
                        var evt=e||window.event;
                        var target=evt.srcElement||evt.target;
                        if(target&&target.getAttribute('val'))
                        {
                            alert(target.getAttribute('val'));
                        }
                    }
                    var tablestr=this.View();
                    this.tablestr=tablestr;
                    calenderDiv.innerHTML=tablestr;
                    var div=document.createElement('div');
                    div.style.width='auto';
                    div.style.height='auto';
                    div.appendChild(calenderDiv);

                    ///翻页div
                    var pagerDiv=document.createElement('div');
                    pagerDiv.style.width='auto';
                    pagerDiv.style.height='auto';

                    var that=this;

                    ///重新设置参数
                    var resetPara=function(year,month,day){
                        that.date=new Date(year,month,day);
                        that.year=that.date.getFullYear();
                        that.month=that.date.getMonth()+1;
                        that.day=that.date.getDate();
                        that.week=that.date.getDay();
                        that.weekstart=that.getWeekDay(that.year, that.month-1, 1);
                        that.monthdays= that.getMonthDays(that.year,that.month);
                    }

                    //上一页
                    var  preBtn=document.createElement('input');
                    preBtn.type='button';
                    preBtn.value='<';

                    preBtn.οnclick=function(){
                        that.containerDiv.removeChild(div);
                        resetPara(that.year,that.month-2,that.day);
                        that.Render();
                    }
                    //下一页
                    var  nextBtn=document.createElement('input');
                    nextBtn.type='button';
                    nextBtn.value='>';

                    nextBtn.οnclick=function(){
                        that.containerDiv.removeChild(div);
                        resetPara(that.year,that.month,that.day);
                        that.Render();
                    }

                    pagerDiv.appendChild(preBtn);
                    pagerDiv.appendChild(nextBtn);
                    div.appendChild(pagerDiv);

                    var dropDiv=document.createElement('div');
                    var dropdivstr='';
                    //选择年份
                    dropdivstr+='<select id="ddlYear">';
                    for (var i = 1900; i <= 2100; i++) {
                        dropdivstr+=
                                i==that.year
                                        ?'<option  value="'+i+'" selected="true">'+i+'</option>'
                                        : '<option  value="'+i+'">'+i+'</option>';
                    };
                    dropdivstr+='</select>';

                    //选择月份
                    dropdivstr+='<select id="ddlMonth">';
                    for (var i = 1; i <= 12; i++) {
                        dropdivstr+=
                                i==that.month
                                        ?'<option  value="'+i+'" selected="true">'+i+'</option>'
                                        : '<option  value="'+i+'">'+i+'</option>';
                    };
                    dropdivstr+='</select>';
                    dropDiv.innerHTML=dropdivstr;
                    div.appendChild(dropDiv);
                    console.log(that);
                    console.log(that.containerDiv);
                    that.containerDiv.appendChild(div);
                    ///绑定选择年份和月份的事件
                    var  ddlChange=function(){
                        var  ddlYear=document.getElementById('ddlYear');
                        var  ddlMonth=document.getElementById('ddlMonth');
                        var   yearIndex=ddlYear.selectedIndex;
                        var  year=ddlYear.options[yearIndex].value;
                        var   monthIndex=ddlMonth.selectedIndex;
                        var  month=ddlMonth.options[monthIndex].value;
                        that.containerDiv.removeChild(div);
                        resetPara(year,month-1,that.day);
                        that.Render();
                    }

                    ddlYear.οnchange=function(){
                        ddlChange();
                    }

                    ddlMonth.οnchange=function(){
                        ddlChange();
                    }
                }
            }
            var calender=new Calender('dvTest',{
                        border:'1px  solid green',
                        width:'400px',
                        height:'200px',
                        backgroundColor:''
                    }
            );
            calender.Render();
        });
    </script>
</head>
<body>
    <div id="dvTest"></div>
</body>
</html>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值