效果图:

 

html:

<li class="nav-item">日历</li>

 

css:

.Dat{width: 200px;position: fixed;z-index: 99;font-size: 12px;color: #000;background-color: #fff;}
.Dat .Dat-title{height: 20px;line-height: 20px;text-align: center;position: relative;border: 1px solid #6593CF;}
.Dat .Dat-title .Dat-btn{position: absolute;width: 0;height: 0;font-size: 0;top: 4px;overflow:hidden;border-width: 6px;border-style: dashed;border-color: transparent;}
.Dat .Dat-title .Dat-btn.prive{border-right: 6px solid #6593CF;left: 0;}
.Dat .Dat-title .Dat-btn.next{border-left: 6px solid #6593CF;right: 0;}
.Dat table th{text-align: center;width: 20px;height: 20px;}
.Dat table td{text-align: right;padding: 0 8px 0 0;width: 20px;height: 20px;cursor: pointer;}
.Dat table td+td{border-left: 1px solid #6593CF;}
.Dat table td:hover{color: #6593CF;}
.Dat table tr{border: 1px solid #6593CF;border-top: none;}

 

javascript: 

依赖JQ

$('.nav-item').click(function(){
  var that = this;
  MyDat({
  dom:that,
  callback:function(e){
    console.log(e)
  }
  })
})

function MyDat(obj){
  $('.Dat').remove();
  var dt = new Date(),
  y = dt.getFullYear(),
  m = dt.getMonth(),
  d = dt.getDay();
  var div = document.createElement('div');
  div.className = 'Dat';
  var str = '<div class="Dat-title"><span class="Dat-btn prive"></span> <span class="date"></span><span class="Dat-btn next"></span></div>'
      +'<table><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>'
      +'<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>'
      +'<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>'
      +'<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>'
      +'<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>'
      +'<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>'
      +'<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>'
  $(div).append(str);
  $('body').append(div);

  var w,h;
  if( ( $(div).width() + $(obj.dom)[0].offsetLeft ) > $(window).width() ){
    w = $(obj.dom)[0].offsetLeft-($(div).width()-$(obj.dom)[0].offsetWidth);
  }else{
    w = $(obj.dom)[0].offsetLeft;
  };

  if( ( $(div).height() + $(obj.dom)[0].offsetTop+$(obj.dom)[0].offsetHeight ) > $(window).height() ){
    h = $(obj.dom)[0].offsetTop-($(div).height());
  }else{
    h = $(obj.dom)[0].offsetTop+$(obj.dom)[0].offsetHeight;
  }

  $(div).css({'left': w, 'top': h})
  setDay(y, m, d);
  function setDay(y, m, d){
    var dt_arr = getD(y,m+1)
    var index = 0;
    var first_day = new Date(y,m,1).getDay();
    $('.date').text(y+'年'+(m+1)+'月 ')
    $('.Dat td').attr({ 'data-year': '', 'data-month': '', 'data-day': '' }).text('');
    $('.Dat td').each(function(k,v){
      if( k >= first_day ){
        $(v).attr({ 'data-year': y, 'data-month': m, 'data-day': dt_arr[index] }).text(dt_arr[index]);
        index++
      }
    })

  };  
  $(div).click(function(e){

    if(e.target == $('.Dat-btn.prive')[0]){
      --m;
      dt = new Date(y, m, d);
    }else if(e.target == $('.Dat-btn.next')[0]){
      ++m;
      dt = new Date(y, m, d);
    }else if(e.target.nodeName == 'TD'){
      obj.callback(e.target.dataset)
    }
    y = dt.getFullYear();
    m = dt.getMonth();
    d = dt.getDay();
    setDay(y, m, d);
  })
  $(document).on('click',function(e){
    if(
      e.target == obj.dom ||e.target == $('.Dat-title')[0] ||e.target == $('.Dat-title .prive')[0] ||
      e.target == $('.Dat-title .next')[0] ||e.target == $('.Dat-title .next')[0] ||e.target == $('.Dat-title .date')[0] ||
      e.target == $('.Dat table')[0] ||e.target == $('.Dat table th')[0] ||e.target == $('.Dat table th')[1] ||
      e.target == $('.Dat table th')[2] ||e.target == $('.Dat table th')[3] ||e.target == $('.Dat table th')[4] ||
      e.target == $('.Dat table th')[5] ||e.target == $('.Dat table th')[6]
    ){
      return;
    }else{
      $(div).remove();
    }
  })  
};
/*判断闰年*/
function isLeapYear(year){
  var cond1 = year % 4 == 0; //条件1:年份必须要能被4整除
  var cond2 = year % 100 != 0; //条件2:年份不能是整百数
  var cond3 = year % 400 == 0; //条件3:年份是400的倍数
  var cond = cond1 && cond2 || cond3;
  if (cond) {
    return true;
  } else {
    return false;
  }
};

/*获取月份中的日期*/
function getD(y,m){
  var a = [];
  var n = 1;
  if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
    n = 32;
  } else if (m == 2) {
    if (isLeapYear(y)) {
      n = 30;
    } else {
      n = 29;
    };
  } else {
    n = 31;
  };
  for (var i = 1; i < n; i++) {
    a.push(i);
  };
  return a
};

 

posted on 2018-06-29 15:55  YC小杨  阅读(145)  评论(0编辑  收藏  举报