[JS]基于JQ的简单日历组件

开门见山,需求UI如图

找了几个日历插件,越看越麻烦,直接上手撸更容易满足定制化需求

 

HTML:

<div id="calendarArea"> </div>

JS:

function getDays(year, month, day) {

var columnIndex = 1, cellIndex = 1;

var prevMonth = new Date(year, month - 1, 0);

var prevDays = [];

// 填充前一月的空位

while (prevMonth.getDay() !== 6) {

prevDays.unshift(prevMonth.getDate())

prevMonth.setDate(prevMonth.getDate() - 1)

}

prevDays.forEach(day => {

var cell = getCell(columnIndex, cellIndex);

cell.innerHTML = '<div class="td-container" style="color:rgba(0,0,0,0)">' + day + '</div>';

cellIndex++

})

// 当前月从1号开始

var nowDay = 1;

var nowMonth = new Date(year, month - 1, 1);

var lastDay = new Date(year, month - 1, day).getDate();

while (nowDay <= lastDay) {

if (cellIndex > 7) {

cellIndex = 1;

columnIndex++;

}

var cell = getCell(columnIndex, cellIndex);

if (true) { // 判断是否异常

cell.innerHTML = '<div class="td-container" style="color:#fff;background-color:rgb(255,93,92);" onclick="showAlarmDetail()"><div>' + nowDay + '</div><div>异常</div></div>';

} else {

cell.innerHTML = '<div class="td-container" style="background-color:rgb(244,244,244)">' + nowDay + '</div>';

}

cellIndex++;

nowDay++;

nowMonth.setDate(nowDay);

}

}

// 获取到td的dom list

function getCell(column, cell) {

return document.querySelectorAll('#table' + calendarIdx + ' tbody tr')[column - 1].querySelectorAll('td')[cell - 1]

}

// 渲染单个月

const renderSingleMonth = (year, month, day) => {

$("#calendarArea").append('<table cellspacing=0 style="bordercolor:#C0C0C0;text-align:center;" width="100%" id="table' + calendarIdx + '">' +

'<thead><tr>' + month + '月</tr>' +

// '<tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>' +

'</thead><tbody>' +

'<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>' +

'</tbody></tbale>');

let days = getDays(year, month, day);

}

let currentDate = new Date();

let calendarIdx = 0

let year = currentDate.getFullYear()

let month = currentDate.getMonth() + 1

let lastDay = currentDate.getDate()

renderSingleMonth(year, month, lastDay)

calendarIdx++;

month--;

// 上一个月的calendar

lastDay = new Date(year, month, 0).getDate();

renderSingleMonth(year, month, lastDay)

calendarIdx++;

month--;

// 上上个月的calendar

lastDay = new Date(year, month, 0).getDate();

renderSingleMonth(year, month, lastDay)

calendarIdx++;

month--;

···

效果如下:

细节完善就不po了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值