起个网名好难 发表于 2023-12-30 09:51

也做个练习:月历

本帖最后由 起个网名好难 于 2024-1-1 05:12 编辑 <br /><br />功能不完善的程序片段,只为练习下 type="month"<br>

<style>
#calendar td        {text-align:center;font-size:1.2em;font-weight:bold;}
#calendar table        {width:100%;}
#calendar th        {color:brown;font:bold 1.5em '微软雅黑';}
#calendar        {width:90%;padding:8px;margin:auto;}
#outBlk        {width:320px;background-color:#ddd;margin:auto;overflow:hidden;border:thick gray solid;border-radius:24px;padding:16px 12px;text-align:center;}
#selMonth {padding:10px;margin:2px;}
</style>

<div id="outBlk">
<input type='button' id='prem'value='&#9668' title='上一个月'/>&nbsp;
<input id="selMonth" type="month" min="1900-01" max="2100-01" />
&nbsp;<input type='button' id='nextm' value='&#9658'title='下一个月'/>
&#X3000; <input type='button' id='tday' value='今天' />
<div id='calendar'></div>
</div>

<script>

var chkMonth = new Date();
var cur_month = chkMonth.getMonth()+1;
selMonth.defaultValue = `${chkMonth.getFullYear()}-${cur_month < 10 ? '0'+cur_month :''+cur_month}`;

prem.onclick = function()        {
        selMonth.stepDown(1);
        showTable();
}
nextm.onclick = function()        {
        selMonth.stepUp(1);
        showTable();
}
selMonth.oninput = function(e)        {
        if('' === e.target.value) selMonth.value = '1970-01';
        else        return false;
}


function mkTab(yv, mv)        {        // 构造月历表格
        let tmp_d = new Date(yv, mv-1, 1);
        let first_d = tmp_d.getDay();        //        这个月的第一天是星期几
        tmp_d = new Date(yv, mv, 0);
        let last_d = tmp_d.getDate()        //        这个月有多少天
       
        //        表头是不变的
        let tabStr = "<table><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>";
        //        第一行需特殊处理
        tabStr += '<tr>';
        let dv = 1, offIdx = 7 - first_d;
        for(i = 0; i < first_d; i++)        tabStr += '<td> </td>';        // 第一行加上适当的空格
        for(i = 0; i < offIdx; i++,dv++) tabStr += `<td>${dv}</td>`;        //       
        tabStr += '</tr><tr>';
        //        其余的行处理
        for(i = dv; i <= last_d; i++)        {
                tabStr += `<td>${i}</td>`;
                if((i-offIdx) % 7 == 0)        tabStr += '</tr><tr>';        //        七个日子就换一行
        }
        tabStr += "</tr></table>"
        calendar.innerHTML = tabStr;
}
function showTable()        {
        let ym = selMonth.value.split('-');
        mkTab(parseInt(ym),parseInt(ym));
}
selMonth.onchange = showTable;
tday.onclick = function()        {
        let cueday = new Date();
        let curMonth = cueday.getMonth() + 1;
        selMonth.value = `${cueday.getFullYear()}-${curMonth < 10 ? '0' +curMonth:'' + curMonth}`;
        showTable();
        let cday = cueday.getDate();
        let tds = calendar.querySelectorAll("td");
       
        tds.forEach(function(ele,idx)        {
                if(ele.innerHTML == cday)       ele.style.color = 'red';
        });
}

showTable();
</script>

起个网名好难 发表于 2023-12-30 09:52

本帖最后由 起个网名好难 于 2023-12-30 21:50 编辑

<style>
#calendar td        {text-align:center;font-size:1.2em;font-weight:bold;}
#calendar table        {width:100%;}
#calendar th        {color:brown;font:bold 1.5em '微软雅黑';}
#calendar        {width:90%;padding:8px;margin:auto;}
#outBlk        {width:320px;background-color:#ddd;margin:auto;overflow:hidden;border:thick black solid;border-radius:24px;padding:16px 12px;}
#selMonth {padding:10px;margin:2px;}
</style>

<div id="outBlk">
<input type='button' id='prem'value='&#9668' title='上一个月'/>&nbsp;
<input id="selMonth" type="month" min="1900-01" max="2100-01" />
&nbsp;<input type='button' id='nextm' value='&#9658'title='下一个月'/>
&#X3000; <input type='button' id='tday' value='今天' />
<div id='calendar'></div>
</div>

<script>

var chkMonth = new Date();
selMonth.defaultValue = `${chkMonth.getFullYear()}-${chkMonth.getMonth()+1}`;

prem.onclick = function()        {
        selMonth.stepDown(1);
        showTable();
}
nextm.onclick = function()        {
        selMonth.stepUp(1);
        showTable();
}


function mkTab(yv, mv)        {        // 构造月历表格
        let tmp_d = new Date(yv, mv-1, 1);
        let first_d = tmp_d.getDay();        //        这个月的第一天是星期几
        tmp_d = new Date(yv, mv, 0);
        let last_d = tmp_d.getDate()        //        这个月有多少天
       
        //        表头是不变的
        let tabStr = "<table><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>";
        //        第一行需特殊处理
        tabStr += '<tr>';
        let dv = 1, offIdx = 7 - first_d;
        for(i = 0; i < first_d; i++)        tabStr += '<td> </td>';        // 第一行加上适当的空格
        for(i = 0; i < offIdx; i++,dv++) tabStr += `<td>${dv}</td>`;        //       
        tabStr += '</tr><tr>';
        //        其余的行处理
        for(i = dv; i <= last_d; i++)        {
                tabStr += `<td>${i}</td>`;
                if((i-offIdx) % 7 == 0)        tabStr += '</tr><tr>';        //        七个日子就换一行
        }
        tabStr += "</tr></table>"
        calendar.innerHTML = tabStr;
}
function showTable()        {
        let ym = selMonth.value.split('-');
        mkTab(parseInt(ym),parseInt(ym));
}
selMonth.onchange = showTable;
tday.onclick = function()        {
        let cueday = new Date();
        selMonth.value = `${cueday.getFullYear()}-${cueday.getMonth()+1}`;
        showTable();
        let cday = cueday.getDate();
        let tds = calendar.querySelectorAll("td");
       
        tds.forEach(function(ele,idx)        {
                if(ele.innerHTML == cday)       ele.style.color = 'red';
        });
}

showTable();
</script>

红影 发表于 2023-12-30 10:42

难难好厉害,这些我连看都看不懂,你却也可以做出来呢,必须点个大大的赞{:4_199:}

红影 发表于 2023-12-30 10:45

我看黑黑那个可以高亮当天,这个不可以么?{:4_204:}

起个网名好难 发表于 2023-12-30 11:23

红影 发表于 2023-12-30 10:42
难难好厉害,这些我连看都看不懂,你却也可以做出来呢,必须点个大大的赞

谢谢支持!

因为是做练习没加注释,加上注释就很容易看懂了。

红影 发表于 2023-12-30 11:46

起个网名好难 发表于 2023-12-30 11:23
谢谢支持!

因为是做练习没加注释,加上注释就很容易看懂了。

难难还能做这样的练习,很厉害呢。我只会套用,别的都不会{:4_173:}

醉美水芙蓉 发表于 2023-12-30 12:08

起个网名好难 发表于 2023-12-30 12:14

红影 发表于 2023-12-30 11:46
难难还能做这样的练习,很厉害呢。我只会套用,别的都不会

套用也很厉害的。

起个网名好难 发表于 2023-12-30 12:15

醉美水芙蓉 发表于 2023-12-30 12:08
谢谢老师分享源码!

谢谢支持!

只是个不完善的练习而已。

红影 发表于 2023-12-30 12:59

起个网名好难 发表于 2023-12-30 12:14
套用也很厉害的。

哪里啊,还是自己能写代码更厉害呢{:4_199:}

世外桃源 发表于 2023-12-30 14:34

欣赏欣赏

世外桃源 发表于 2023-12-30 14:34

加了分变1月份了,日子没有了

起个网名好难 发表于 2023-12-30 16:03

世外桃源 发表于 2023-12-30 14:34
欣赏欣赏

谢谢支持鼓励。

起个网名好难 发表于 2023-12-30 16:04

世外桃源 发表于 2023-12-30 14:34
加了分变1月份了,日子没有了

不太明白你说的问题{:5_102:}

起个网名好难 发表于 2023-12-30 16:08

红影 发表于 2023-12-30 12:59
哪里啊,还是自己能写代码更厉害呢

{:4_191:}{:4_176:}{:4_190:}{:4_180:}

小辣椒 发表于 2023-12-30 16:22

难难也是厉害的,制作的漂亮{:4_199:}

起个网名好难 发表于 2023-12-30 16:25

小辣椒 发表于 2023-12-30 16:22
难难也是厉害的,制作的漂亮

谢谢支持鼓励!

就是个练习而已

老谟深虑 发表于 2023-12-30 16:41

          老师,给你加了分以后,日历只能看到月份,看不到日期了。

起个网名好难 发表于 2023-12-30 16:47

老谟深虑 发表于 2023-12-30 16:41
老师,给你加了分以后,日历只能看到月份,看不到日期了。

谢谢告知,我想法试试。

红影 发表于 2023-12-30 17:11

起个网名好难 发表于 2023-12-30 16:08


问好难难,周六快乐{:4_187:}
页: [1] 2
查看完整版本: 也做个练习:月历