js原生日历(小白的版本)

  1. 原生日历

图片描述

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>日历</title>
<style type="text/css">
*{
    margin:0;
    padding:0;
    list-style:none;
}
#out{
    position: absolute;
    width: 300px;
    height: 300px;
    /*border: 1px solid black;*/
    /*background: lightgreen;*/
    top: 100px;
    left:500px;
}
#calendar{
    margin: 25px auto;
    width: 252px;
    height: 255px;
    background: white;
    border: 1px solid black;
    font-size: 12px;
    font-family: Arial;
    box-shadow: 5px 5px 5px green outset;
}
#calendar .top{
    height:45px;
    width:100%;
}
#calendar .top span{
    display:block;
    width:84px;
    height: 23px;
    line-height:23px;
    float:left;
    text-align:center;    
}
#calendar .top span a{
    text-decoration: none;
}
#calendar .top span a:hover{
    color:blue;
}
#calendar .top h4{
    width: 100%;
    height: 19px;
    text-line: center;
    line-height: 19px;
    float:left;
    text-align:center;
}
#calendar .list ul{
    width: 100%;
    height: 100%;
}
#calendar .list ul .week{
    width: 36px;
    height: 30px;
    line-height: 30px;
    float: left;
    text-align:center;
    background-color:#ccc;
}
#calendar .list ul .day{
    background-color:white;
}
</style>
<script type="text/javascript">
var months = ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"];
window.onload = function(){
    var iDate = new Date();
    var yearBox = document.getElementById('year');
    var monthBox = document.getElementById('month');
    var day = iDate.getDate();
    yearBox.innerHTML = iDate.getFullYear();
    monthBox.innerHTML = months[iDate.getMonth()];
    createList(iDate);
    doMark(day);
}
function doMark(day){
    var addBox = document.getElementById('add');
    var lis = addBox.children;
    for(var i=lis.length - 1;i > 6;i--){
        if(lis[i].innerHTML == day){
            lis[i].style.cssText = 'background-color:lightgreen;border-radius:10px;';
            break;
        }
    }
}
function nextMonth(){
    var yearBox = document.getElementById('year');
    var monthBox = document.getElementById('month'); 
    var index = getIndex(monthBox);
    if(index == 11){
        yearBox.innerHTML = parseInt(yearBox.innerHTML) + 1;
    }
    var next = (++index) % (months.length);
    monthBox.innerHTML = months[next];
    var date = new Date();
    date.setYear(parseInt(yearBox.innerHTML));
    date.setMonth(next);
    removeList();
    createList(date);
}
function lastMonth(){
    var yearBox = document.getElementById('year');
    var monthBox = document.getElementById('month');
    var index = getIndex(monthBox);
    if(index == 0){
        yearBox.innerHTML = parseInt(yearBox.innerHTML) - 1;
    }
    var last = (--index + months.length) % (months.length)
    monthBox.innerHTML = months[last];
    var date = new Date();
    date.setYear(parseInt(yearBox.innerHTML));
    date.setMonth(last);
    removeList();
    createList(date);
}
function getIndex(monthBox){
    for(var i = 0;i < months.length;i++){
        if(months[i] == monthBox.innerHTML)
            return i;
    }
}
Date.prototype.getMonthDays = function(){
    var iDate = new Date();
    iDate.setYear(this.getFullYear());
    iDate.setMonth(this.getMonth() + 1);
    iDate.setDate(0);
    return iDate.getDate();
} 
function createList(date){
    var days = date.getMonthDays();
    date.setDate(1);
    var fir = date.getDay();
    var liNums = fir + days;
    var addBox = document.getElementById('add');
    for(var i = 0;i < liNums;i++){
        var liBox = document.createElement('li');
        liBox.className = 'week day';
        if(i >= fir){
            liBox.innerHTML = (i- fir + 1);
        }
        addBox.appendChild(liBox);
    }
}
function removeList(){
    var addBox = document.getElementById('add');
    var lis = addBox.children;
    //记住要从后往前删,因为removeChild方法会实时改变原有的索引
    for(var i=lis.length - 1;i > 6;i--)
        addBox.removeChild(lis[i]);
}
</script>
</head>
<body>
<div id="out">
    <div id="calendar">
        <div class="top">
            <span><a href="#" onclick="lastMonth()">上一月</a></span>
            <span id="year"></span>
            <span><a href="#" onclick="nextMonth()">下一月</a></span>
            <h4 id="month"></h4>
        </div>
        <div class="list">
            <ul id="add">
                <li class="week">日</li>            
                <li class="week">一</li>            
                <li class="week">二</li>            
                <li class="week">三</li>            
                <li class="week">四</li>            
                <li class="week">五</li>            
                <li class="week">六</li>                            
            </ul>
        </div>
    </div>
</div>
</body>
</html>
  1. margin-top失效问题

图片描述
解决方式:可以给父容器一个border(这会导致留白);可以给父容器设置overflow:hidden;内容器可以改用padding-top

  1. removeChild删除节点时的删不干净问题

在js中使用removeChild删除节点时,要倒着删除(如在ul里删除所有的li节点时),因为removeChild方法会实时更新索引值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值