好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于jquery实现日历效果

本文实例为大家分享了jquery实现日历效果的具体代码,供大家参考,具体内容如下

?

/**

  * 2021/3/6

  * Calendar

  */

 

/* get y Year m Month before days

  */

function getBDays( y, m ) {

  return ( new Date(y, m, 1).getDay());

}

 

/* get y Year m Month total days

  */

function getTDays( y, m ) {

  return ( new Date(y, m + 1, -1).getDate() + 1);

}

 

/* get y Year m Month last days

  */

function getBMDays( y, m ) {

  return ( new Date(y, m, -1).getDate() + 1);

}

 

function Calendar( nowDate ) {

  // year, month, day

  this .year = nowDate.getFullYear();

  this .month = nowDate.getMonth();

  this .day = nowDate.getDate();

 

  // before days

  this .beforeDays = getBDays( this .year, this .month);

  // current month days

  this .totalDays = getTDays( this .year, this .month);

  // last month days

  this .lastDays = getBMDays( this .year, this .month);

 

  // save now date

  this .nowY = nowDate.getFullYear();

  this .nowM = nowDate.getMonth();

}

 

Calendar.prototype.initCalendar = function () {

  // get calendar id

  let calDiv = $( "#Calendar" ).append( "<table></table>" );

 

  // get calendar table

  let calTable = $( "#Calendar > table" );

 

  // add calendar table tr

  for ( let n = 0; n < 8; n++ ) {

  calTable.append( '<tr></tr>' );

  }

 

  // get calendar table tr : header

  let calHeadTr = $( "#Calendar > table > tr:first" );

 

  // add calendar table tr th

  for ( let n = 0; n < 3; n++ ) {

  calHeadTr.append( '<th></th>' );

  }

 

  // select index > 0 tr

  let calBodyTr = $( "#Calendar > table > tr:gt(0)" );

 

  // add calendar table tr td

  for ( let n = 0; n < 7; n++ ) {

  calBodyTr.append( '<td></td>' );

  }

}

 

Calendar.prototype.insertDate = function ( calName ) {

  // get calendar table tr td : header

  let calHeadTh = $( "#Calendar > table > tr:first > th" );

 

  // modify header content

  $(calHeadTh[0]).html( "<a><</a>" );

  $(calHeadTh[1]).html(`<a>${ this .year} 年 ${ this .month + 1} 月</a>`);

  $(calHeadTh[2]).html( "<a>></a>" );

 

  // add style to header

  $(calHeadTh[1]).attr({

  "colspan" : 5,

  "title" : calName

  });

 

  // weekday arrays

  const calWeekArr = [ '日' , '一' , '二' , '三' , '四' , '五' , '六' ];

 

  // get calendar table tr td : weekdays

  let calWeekTd = $( "#Calendar > table > tr:eq(1) > td" );

  for ( let n = 0; n < 7; n++ ) {

  $(calWeekTd[n]).html(`<a>${calWeekArr[n]}</a>`);

  }

 

  // get calendar table tr td : body

  let calBodyTd = $( "#Calendar > table > tr:gt(1) > td" );

 

  // insert before days

  for (let n = this .beforeDays - 1, lastDays = this .lastDays;

  n >= 0;

  n--, lastDays--) {

  $(calBodyTd[n]).html(`<a>${lastDays}</a>`);

  $(calBodyTd[n]).attr( "class" , "other-day" );

  }

  // insert current days

  for (let n = this .beforeDays, i = 1;

   i <= this .totalDays;

   i++, n++) {

  $(calBodyTd[n]).html(`<a>${i}</a>`);

 

  if (i == this .day &&

   ( new Date( this .year, this .month, 1).getMonth() == this .nowM) &&

   ( new Date( this .year, this .month, 1).getFullYear() == this .nowY)) {

  $(calBodyTd[n]).attr( "class" , "now-day" );

  }

  else {

  $(calBodyTd[n]).removeAttr( "class" , "now-day" );

  }

  }

 

  // insert after days

  for (let n = this .beforeDays + this .totalDays, i = 1;

  n < calBodyTd.length;

  n++, i++) {

  $(calBodyTd[n]).html(`<a>${i}</a>`);

  $(calBodyTd[n]).attr( "class" , "other-day" );

  }

}

 

Calendar.prototype.update = function ( newDate ) {

  // year, month, day

  this .year = newDate.getFullYear();

  this .month = newDate.getMonth();

  this .day = newDate.getDate();

 

  // before days

  this .beforeDays = getBDays( this .year, this .month);

  // current month days

  this .totalDays = getTDays( this .year, this .month);

  // last month days

  this .lastDays = getBMDays( this .year, this .month);

}

 

function initDate() {

  // create Date object

  let now = new Date();

  let cal = new Calendar( now );

 

  // init and insert

  cal.initCalendar();

  cal.insertDate( 'MyDate' );

 

  // add click event to th:first

  $( "#Calendar > table > tr:first > th:first" ).click( function (){

  now.setMonth( now.getMonth() - 1 );

  cal.update( now );

  cal.insertDate( 'MyDate' );

  });                        

 

  // add click event to th:last

  $( "#Calendar > table > tr:first > th:last" ).click( function (){

  now.setMonth( now.getMonth() + 1 );

  cal.update( now );

  cal.insertDate( 'MyDate' );

  });

}

 

initDate();

html

?

<!DOCTYPE html>

< html >

  < head >

  < meta charset = "utf-8" />

  < title >Document</ title >

  < link href = "css/dateCal.css" rel = "stylesheet" media = "screen" >

  </ head >

  < body >

  < div id = "Calendar" ></ div >

  < script src = "js/jquery.js" ></ script >

  < script src = "js/dateCal.js" ></ script >

  </ body >

</ html >

CSS:

?

#Calendar {

  width : 200px ;

  padding-bottom : 5px ;

  box-shadow: 0 1px 3px #ccc ;

  border : 1px solid #EDEDED ;

}

 

#Calendar table {

  width : inherit;

  text-align : center ;

  user-select: none ;

  font-family : "Comic Sans MS" ;

  border-collapse : collapse ;

  border-spacing : 0px ;

}

 

#Calendar table tr th {

  background : #f8f8f8 ;

  font-size : 12px ;

}

 

#Calendar table tr:nth-child( 2 ) {

  background : #f8f8f8 ;

}

 

#Calendar table tr td {

  font-size : 10px ;

}

 

#Calendar table tr td.now-day {

  color : red ;

}

 

#Calendar table tr td.other-day {

  color : lightgray;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_35068659/article/details/114459393

查看更多关于基于jquery实现日历效果的详细内容...

  阅读:43次