JS双月份显示联动效果,点击日期浮出消息提示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>原生JS写的日历月历 - demo by js.alixixi.com</title>
<style type="text/css">
<!--
body {font-size: 14px;line-height: 20px;margin: 0px;padding: 0px;text-align:center;font-family: Arial;}
#overlay{position:absolute;z-index:999;top:0;left:0;width:100%;height:100%;background:#000;opacity:0.3;filter:alpha(opacity=30);display:none;}
#win{position:absolute;z-index:999;top:50%;left:50%;width:400px;height:200px;background:rgba(00, 00, 00, 0.5);margin:-100px 0 0 -200px;display:none;}
#win #otitle{color:#fff;height:33px;padding-left:10px;text-align:left;background:rgba(00, 00, 00, 0.7);}
#win #otitle #otitlestr {float:left;width:200px;height:30px;line-height:30px;}
#win #otitle #close {font-size:24px;width:33px;height:33px;line-height:33px;text-align:center;font-weight:bold;float:right;cursor:pointer;}
#win #showstr {color:#fff;margin:10px;text-align:left;}
.clear{clear: both;}
em{font-style: normal;}
ul,li{list-style-type: none;margin:0px;padding:0px;}
#newDate{width:1230px;height:auto;margin:35px auto 0 auto;}
#newDate #nowDate{width:600px;height:600px;float:left;cursor:pointer;}
#newDate #nextDate{width:600px;height:600px;float:right;cursor:pointer;}
#newDate .Header{width:594px;height:50px;background:#e6dcda;border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #FFF;position:relative;-moz-user-select:none;-webkit-user-select:none;user-select:none;  }
#newDate .c{font-size:24px;font-weight:bold;height:50px;line-height:50px;text-align:center;}
#newDate .l{font-size:24px;font-weight:bold;height:50px;line-height:50px;position:absolute; top:0px; left:14px;}
#newDate .r{font-size:24px;font-weight:bold;height:50px;line-height:50px;position:absolute; top:0px; right:14px;}
#newDate .Weeks{width:595px;height:30px;}
#newDate span{font-weight:bold;width:84px;height:30px;line-height:30px;text-align:center;background:#e6dcda;margin-right:1px;float:left;}
#newDate ul li{color:#999;font-size:24px;width:84px;height:70px;line-height:70px;text-align:center;margin-top:1px;margin-right:1px;background:#f5f5f5;float:left;}
-->
</style>
<!--[IF lt IE 9]>
<style>
#win,#win #otitle{filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7f000000,endColorstr=#7f000000);}
</style>
<![endif]-->
<script type="text/javascript">
window.onload = function(){
    function $(id){return typeof id === "string" ? document.getElementById(id) : id;}
 function lightBoxShow(title,str)
 {
  var oWin = $("win");
     var oLay = $("overlay");
  $("otitlestr").innerHTML = title;
  $("showstr").innerHTML = str;
  oLay.style.display = "block";
  oWin.style.display = "block";
  $("close").onclick = function ()
     {
      oLay.style.display = "none";
      oWin.style.display = "none" 
     }
 }
 
    var newDate = document.getElementById("newDate");
 var nowDate = document.getElementById("nowDate");
 var nextDate = document.getElementById("nextDate");
 var nDate = new Date();
 
 if(nDate.getMonth()+1==12){
     viewDate(nowDate,nDate.getFullYear(),nDate.getMonth()+1,true);
  viewDate(nextDate,nDate.getFullYear()+1,1);
 }else{
     viewDate(nowDate,nDate.getFullYear(),nDate.getMonth()+1,true);
  viewDate(nextDate,nDate.getFullYear(),nDate.getMonth()+2);
 }
 showBtn();
 
 function viewDate(obj,year,month,bBtn){
     var nDate = new Date();
  var dayNum = 0;
        
        if(!obj.bBtn){
            obj.Header = document.createElement("div");
            obj.Header.className = "Header";
            obj.appendChild(obj.Header);
            
            var Weeks = document.createElement("div");
            Weeks.className = "Weeks";
            obj.appendChild(Weeks);
            
            var weeksArr = ['SUN','MON','TUE','WEB','THU','FRI','SAT'];
            for(var i=0;i<7;i++){
                var nSpan = document.createElement("span");
                nSpan.innerHTML = weeksArr[i];
                if(i==0 || i==6){
                    nSpan.style.color = "red";   
                }
                Weeks.appendChild(nSpan);
            }
            
            var nUl = document.createElement("ul");
            for(var i=0;i<42;i++){
                var nLi = document.createElement("li");
                nUl.appendChild(nLi);
            }
            obj.appendChild(nUl);
            
            obj.bBtn = true;
        }
        obj.Header.innerHTML = ( bBtn ? '<div class="l">< <em>'+(month-1)+'</em></div>' : '<div class="r"><em>'+(month+1)+'</em> ></div>')+'<div class="c"><em>'+year+'</em>-<em>'+month+'</em></div>'; 
        var aLi = obj.getElementsByTagName("li");
        for(var i=0;i<aLi.length;i++){
            aLi[i].innerHTML = "";
            aLi[i].style.background = "#f5f5f5";
            aLi[i].style.color = "#999";
        }
        
        if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
   dayNum = 31;
  }
  else if(month==4 || month==6 || month==9 || month==11){
   dayNum = 30;
  }
  else if(month==2 && isLeapYear(year)){
   dayNum = 29;
  }
  else{
   dayNum = 28;
  }
  
  nDate.setFullYear(year);
  nDate.setMonth(month-1);
  nDate.setDate(1);
  
  function Today(){
      var tDate = new Date();
   var tEm = aLi[i].parentNode.parentNode.getElementsByTagName("em");
      var tMonth = parseInt(tEm[2].innerHTML);
      var tYear = parseInt(tEm[1].innerHTML);
   if(aLi[i].innerHTML == tDate.getDate() && tYear == tDate.getFullYear() && tMonth == tDate.getMonth()+1){
          aLi[i].style.color = "#000";
          aLi[i].style.background = "#e6dcda";
      }   
  }
  
  switch(nDate.getDay()){
   case 0:
    for(var i=0;i<dayNum;i++){
     aLi[i].innerHTML = i+1;
     Today();
    }
   break;
   case 1:
    for(var i=0;i<dayNum;i++){
     aLi[i+1].innerHTML = i+1;
     Today(); 
    }
   break;
   case 2:
    for(var i=0;i<dayNum;i++){
     aLi[i+2].innerHTML = i+1;
     Today();
          }  
   break;
   case 3:
    for(var i=0;i<dayNum;i++){
     aLi[i+3].innerHTML = i+1;
     Today();
    }
   break;
   case 4:
    for(var i=0;i<dayNum;i++){
     aLi[i+4].innerHTML = i+1;
     Today();
    }
   break;
   case 5:
    for(var i=0;i<dayNum;i++){
     aLi[i+5].innerHTML = i+1;
     Today(); 
    }
   break;
   case 6:
    for(var i=0;i<dayNum;i++){
     aLi[i+6].innerHTML = i+1;
     Today();  
    }
   break;
   
  }
  
  if(month==1 && bBtn){
   obj.Header.getElementsByTagName('em')[0].innerHTML = 12;
  }
  else if(month==12 && !bBtn){
   obj.Header.getElementsByTagName('em')[0].innerHTML = 1;
  }
  
 }
 
 function isLeapYear(year){
  if(year%4==0 && year%100!=0){
   return true;
  }
  else{
   if(year%400==0){
    return true;
   }
   else{
    return false;
   }
  }
 }
 
 
 function showBtn(){
  var nowEm = nowDate.getElementsByTagName("em");
  var nextEm = nextDate.getElementsByTagName("em");
  var leftMonth = parseInt(nowEm[0].innerHTML);
  var leftYear = parseInt(nowEm[1].innerHTML);
  var rightMonth = parseInt(nextEm[0].innerHTML);
  var rightYear = parseInt(nextEm[1].innerHTML);
  
  
  nowEm[0].parentNode.onclick = function(){
  
   if(leftMonth == 12){
    viewDate(nowDate,leftYear-1,leftMonth,true);
    viewDate(nextDate,leftYear,1);
   }
   else{
    viewDate(nowDate,leftYear,leftMonth,true);
    viewDate(nextDate,leftYear,leftMonth+1);
   }
   
   showBtn();
     
  };
  
  nextEm[0].parentNode.onclick = function(){
   
   if(rightMonth == 1){
    viewDate(nowDate,rightYear,12,true);
    viewDate(nextDate,rightYear+1,rightMonth);
   }
   else{
    viewDate(nowDate,rightYear,rightMonth-1,true);
    viewDate(nextDate,rightYear,rightMonth);
   }
   
   showBtn();
     
  };
  
 }
 function nowDay(){
     var tLi = newDate.getElementsByTagName("li");
     var tDate = new Date();
     
     for(var i=0;i<tLi.length;i++){
         tLi[i].onmouseover = function(){
          if(this.innerHTML != ""){
              this.style.color = "#000";
              this.style.background = "#e6dcda";
       }
      }
      tLi[i].onmouseout = function(){
          if(this.innerHTML != ""){
             this.style.color = "#999";
             this.style.background = "#f5f5f5";
       }
      }
      tLi[i].onclick = function(){
          var tEm = this.parentNode.parentNode.getElementsByTagName("em");
          var tMonth = parseInt(tEm[2].innerHTML);
          var tYear = parseInt(tEm[1].innerHTML);
          if(this.innerHTML!=""){
              lightBoxShow(tYear+"-"+tMonth+"-"+this.innerHTML+" Message","None");
              //alert(tYear+"-"+tMonth+"-"+this.innerHTML);
          }
      }
     }
     
     for(var j=tLi.length/2;j<tLi.length;j++){
         if(tLi[j].innerHTML == tDate.getDate()){
          tLi[j].style.color = "#000";
          tLi[j].style.background = "#e6dcda";
      }    
     }
 }
 nowDay();
}
</script>
</head>
<body>
<div id="newDate">
   <div id="nextDate"></div>
   <div id="nowDate"></div>
</div>
<div id="overlay"></div>
<div id="win">
    <div id="otitle">
        <div id="close">×</div>
     <div id="otitlestr"></div>
    </div>
    <div id="showstr"></div>
</div>
</body>
</html>

效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Js日历控件,在一个网页上同时显示两个日期选择器,写成了封装类,方便使用者调用。同时美化的相当不错。   包括了以下函数:   1、2012——2020年节假日信息(包括节假日前1~3天/后1~3天)   2、格式化数字,不足两位前面补0   3、将日期对象/日期字会串格式化为指定日期字符串   4、将日期字符串格式化为数字   5、获取目标元素针对于文档的位置   6、元素选择器   7、查找元素位置   8、判断目标元素是否包含指定的className      关于一些日历调用的参数说明:Calendar({    id: "#J_date_1", //触发显示日历元素ID    isPopup: !0, //弹出式日历    isPrevBtn: !0, //显示按钮    isNextBtn: !0, //显示按钮    isCloseBtn: !0, //显示关闭按钮    isHoliday: !0, //节假日特殊显示    isHolidayTips: !0, //显示节假日1~3天/后1~3天信息    isDateInfo: !0, //显示日期信息    isMessage: !0, //有日历提示信息    isCalStart: !0, //标记为开始时间    dateInfoClass: "date-info-start", //开始时间icon样式    range: {mindate: "2011-09-01", maxdate: "2020-12-31"},//限制范围(当天——2020-12-31)    count: 2, //日历个数    monthStep: 1, //切换上下日历步长    onSelectDate: fnSelectDate, //选择日期回调方法    onClose: fnClose //关闭日历回调方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值