0.效果预览

简易

只实现了日历最基础的功能,当前日期红色显示,可通过上方的左右按钮查看上一月或下一月的日期。

1.HTML部分

<

>

日一二三四五六

2.CSS部分

#cldFrame{

position: relative;

width: 440px;

margin: 50px auto;

}

#cldBody{

margin: 10px;

position: absolute;

width: 420px;

}

#top{

position: relative;

height: 60px;

text-align: center;

line-height: 60px;

}

#topDate{

font-size: 30px;

}

.curDate{

color: red;

font-weight: bold;

}

table{

background-color: #f7f7f7;

}

#week td{

font-size: 15px;

}

td{

height: 60px;

width: 60px;

text-align: center;

font-family: Simsun;

font-size: 20px;

}

#left, #right{

position: absolute;

width: 60px;

height: 60px;

}

#left{left: 0px;}

#right{right: 0px;}

#left:hover, #right:hover{

background-color: rgba(30, 30, 30, 0.2);

}

Html+Css

当前显示月份和日期下面将在JS中添加。

3.JS部分及原理讲解

先介绍两个常用的和时间有关的函数,相信大多数人都接触过~

①判断某年是否是闰年

/*判断某年是否是闰年*/

function isLeap(year) {

if((year%4==0 && year%100!=0) || year%400==0){

return true;

}

else{

return false;

}

}

二月大概是十二个月份中最不安分的一个月。

②判断某年某月某日是星期几

var monthDay = [31,0,31,30,31,30,31,31,30,31,30,31];

在这之前用数组存放每个月有多少天,我这里将二月的天数设置成了0,之后再决定是加28还是29。

/*判断某年某月某日是星期几,默认日为1号*/

function whatDay(year, month, day=1) {

var sum = 0;

sum += (year-1)*365+Math.floor((year-1)/4)-Math.floor((year-1)/100)+Math.floor((year-1)/400)+day;

for(var i=0; i

sum += monthDay[i];

}

if(month > 2){

if(isLeap(year)){

sum += 29;

}

else{

sum += 28;

}

}

return sum%7; //余数为0代表那天是周日,为1代表是周一,以此类推

}

这个函数是为了判断某年某月的1号是星期几而设定的,实际上可以不设置day这个参数,加上了day这个变量,允许使用者在查某日的日期是星期几时也能调用这个函数。

③日历添加部分

根据当前日期决定日历显示哪个月的日期,根据那月的1号是星期几决定1号的添加位置,前方用空格子填充。该月添加完后后方也用空格子补齐。

/*显示日历*/

function showCld(year, month, firstDay){

var i;

var tagClass = "";

var nowDate = new Date();

var days;//从数组里取出该月的天数

if(month == 2){

if(isLeap(year)){

days = 29;

}

else{

days = 28;

}

}

else{

days = monthDay[month-1];

}

/*当前显示月份添加至顶部*/

var topdateHtml = year + "年" + month + "月";

var topDate = document.getElementById('topDate');

topDate.innerHTML = topdateHtml;

/*添加日期部分*/

var tbodyHtml = '

';

for(i=0; i

tbodyHtml += "

";

}

var changLine = firstDay;

for(i=1; i<=days; i++){//每一个日期的填充

if(year == nowDate.getFullYear() && month == nowDate.getMonth()+1 && i == nowDate.getDate()) {

tagClass = "curDate";//当前日期对应格子

}

else{

tagClass = "isDate";//普通日期对应格子,设置class便于与空白格子区分开来

}

tbodyHtml += "

" + i + "";

changLine = (changLine+1)%7;

if(changLine == 0 && i != days){//是否换行填充的判断

tbodyHtml += "

";

}

}

if(changLine!=0){//添加结束,对该行剩余位置的空白填充

for (i=changLine; i<7; i++) {

tbodyHtml += "

";

}

}//实际上不需要填充后方,但强迫症必须整整齐齐!

tbodyHtml +="

";

var tbody = document.getElementById('tbody');

tbody.innerHTML = tbodyHtml;

}

调用后,日历就可以完整显示了~

var curDate = new Date();

var curYear = curDate.getFullYear();

var curMonth = curDate.getMonth() + 1;

showCld(curYear,curMonth,whatDay(curYear,curMonth));

④下一月与上一月

function nextMonth(){

var topStr = document.getElementById("topDate").innerHTML;

var pattern = /\d+/g;

var listTemp = topStr.match(pattern);

var year = Number(listTemp[0]);

var month = Number(listTemp[1]);

var nextMonth = month+1;

if(nextMonth > 12){

nextMonth = 1;

year++;

}

document.getElementById('topDate').innerHTML = '';

showCld(year, nextMonth, whatDay(year, nextMonth));

}

function preMonth(){

var topStr = document.getElementById("topDate").innerHTML;

var pattern = /\d+/g;

var listTemp = topStr.match(pattern);

var year = Number(listTemp[0]);

var month = Number(listTemp[1]);

var preMonth = month-1;

if(preMonth < 1){

preMonth = 12;

year--;

}

document.getElementById('topDate').innerHTML = '';

showCld(year, preMonth, whatDay(year, preMonth));

}

两者没多大差别,别忘了要绑定到按钮上:

document.getElementById('right').onclick = function(){

nextMonth();

}

document.getElementById('left').onclick = function(){

preMonth();

}

更多有趣的功能等待着你去添加~

html日历页面节假日_html+css+js实现一个简易日历相关推荐

  1. html日历页面节假日_js css+html实现简单的日历

    web页面中很多地方都会用到日历显示,选择等,本文用html.css.javascript实现简单的日历.完成以后的效果与页面左侧的效果差不多,可以切换上个月.下个月.也可以根据实际情况进行扩展. h ...

  2. mysql设计高考倒计时_HTML/CSS+JS制作一个高考倒计时页面

    2020-07-09更新 修复倒计时归零后出现负数的bug 自动切换至下一年日期 效果展示 前言 在B站上找视频学习的,勉强搞出来了,写下此篇文章作为笔记,也希望有更多感兴趣的人能够有所收获. (萌新 ...

  3. html毕业作业消消乐,html+css+js写一个简易功能的消消乐~~~~

    1 2 3 4 content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-htm ...

  4. HTML5七夕情人节表白网页_(唯美满天星)多功能展示(网状球状)3D相册_HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册

    HTML5七夕情人节表白网页_(唯美满天星)多功能展示(网状球状)3D相册_HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花 ...

  5. 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)

    项目源码已上传至码云仓库:云南农业职业技术学院/HTML响应式成人教育官网前端页面(HTML+CSS+JS实现) 项目演示地址:成人教育网 AAP端下载地址:成人教育网APP端.apk-互联网文档类资 ...

  6. html网页设计期末大作业_HTML+CSS+JS网页设计期末课程大作业——橙色的素材火资源整站(25页)

    html网页设计期末大作业_HTML+CSS+JS网页设计期末课程大作业--橙色的素材火资源整站(25页) 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶 ...

  7. 用html+css+js实现一个无限级树形控件

    题目描述: 用html+css+js实现一个无限级树形控件,功能如下: 1.利用html.css展示一个树形菜单 2.点击箭头图标展开子项 3.点击父节点勾选图标能全选或全取消,点击叶节点勾选图标可以 ...

  8. HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)

    用HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌) 效果如下:(鼠标点击按钮可以实现播放或暂停,按钮会旋转,实现了歌词同步,功能还需改进) 代码如下: <!DOCTYPE htm ...

  9. html中各种js效果图,HTML+CSS+JS制作一个漂亮的橙子动态时钟

    HTML+CSS+JS制作一个漂亮的橙子动态时钟 1. 效果图: 2. 背景产生: 利用四块与圆同高的矩形转一定的角度将圆切分成八块形成橙子内里,利用径向渐变形成橙皮. background: rad ...

最新文章

  1. NETCONF 环境搭建
  2. 解析列表中的数据python_将html数据解析成python列表进行操作
  3. CTF---密码学入门第一题 这里没有key
  4. Boost Asio总结(3)异步通信
  5. 一万字,关于产品「需求」阶段的思维公式,都在这儿了
  6. MySQL复习资料(八)——MySQL-事务
  7. webpack常用的三种JS压缩插件
  8. Dojo中跨域获取新浪股票接口返回的数据(练习)
  9. 如何使用插件生成自定义Java 8代码
  10. mysql 中有行号吗_重置SQLite3 / MySQL中的行号计数
  11. QObject::startTimer: Timers cannot be started from another thread
  12. django连接mysql自动同步生成数据表
  13. 搭建无线打印服务器,用旧电脑轻松架设无线网络打印服务器
  14. 服务器 系统 版本查询
  15. 计算机里面的Profile怎么翻译比较好?
  16. [工具]Microsoft To-Do,简约还是简陋?
  17. 华为荣耀20青春版能升级鸿蒙吗,荣耀20 Pro系统要不要升级?
  18. i believe i can fly
  19. MFC CToolBar使用总结
  20. 经纬度转换(go/python/rust)

热门文章

  1. 机器学习——变分推断
  2. FineReport填报--批量删除
  3. GtrLib Chords Pro for Mac(吉他和弦库)
  4. 0基础学习pythonTASK6——If 、For、While语句
  5. 关于DrawText的基准线纵坐标的计算
  6. Apache web服务器目录结构、发布网站
  7. 求助FC上的一个c++代码实现丧心病狂的走迷宫小游戏!
  8. 解决chrt: failed to set pid 0‘s policy: Operation not permitted
  9. LeetCode第127题—单词接龙—Python实现
  10. Android调用系统相机拍摄视频以及获取缩略图