JavaScript代码实现简单日历效果

JavaScript代码实现简单日历效果

引言

日历是人们生活中必不可少的一部分,Javascript通过操作DOM元素以及CSS样式,实现了多种简单的日历效果。本文将详细介绍JavaScript如何实现一个简单的日历效果。

分析与目标

首先,我们要对一个日历的样式进行分析,发现日历主要是由星期和日期构成的,其次各个日期的显示状态需通过计算天数来完成。

所以,我们的目标就很明确了:

  1. 显示星期和日期;
  2. 计算日期,并按照一定样式进行显示。

实现

显示星期和日期

首先,我们要为html页面添加一个日历容器,命名为calendar-wrapper,其内包含两个div容器,一个用于显示星期,一个用于显示日期。如下所示:

<div class="calendar-wrapper">
  <div class="calendar-weekdays"></div>
  <div class="calendar-days"></div>
</div>

其中calendar-weekdays用于显示星期,calendar-days用于显示日期。

然后,我们在Javascript中获取这两个容器,用var关键字定义变量保存:

var $wrapper = document.querySelector('.calendar-wrapper');
var $weekdays = $wrapper.querySelector('.calendar-weekdays');
var $days = $wrapper.querySelector('.calendar-days');

接下来,我们需要给calendar-weekdayscalendar-days设置样式,使得它们呈现出居中对齐、固定高度等效果。

.calendar-wrapper {
  width: 100%;
  text-align: center;
  height: 100px;
}
.calendar-weekdays, .calendar-days {
  display: inline-block;
  vertical-align: top;
  height: 100%;
  width: calc(50% - 20px);
  margin: 0 10px;
  box-sizing: border-box;
  padding: 10px;
}

最后,我们通过循环创建<div>标签,添加星期和日期:

var weekDays = ['日', '一', '二', '三', '四', '五', '六'];
weekDays.forEach(function(weekDay) {
  var $weekDay = document.createElement('div');
  $weekDay.textContent = weekDay;
  $weekdays.appendChild($weekDay);
});

for (var i = 1; i <= 31; i++) {
  var $day = document.createElement('div');
  $day.textContent = i;
  $days.appendChild($day);
}

经过以上代码的实现,我们就可以在HTML页面看到一个基本的日历效果了。

计算日期,并按照一定样式进行显示

考虑到日历界面主要呈现的是日期,所以我们需要计算出当前月份的天数,并把它们显示在相应的日期格中。我们可以通过new Date()获取当前年份、月份和日期,并使用Date对象中的一些方法获得当前月份的总天数,如下所示:

var now = new Date();
var month = now.getMonth() + 1;
var year = now.getFullYear();
var daysInMonth = new Date(year, month, 0).getDate();

其中new Date(year, month, 0)第三个参数必须传0,用于返回前一个月的最后一天,从而得出当前月份的天数。

然后,我们通过循环创建<div>标签,添加星期和日期:

for (var i = 1; i <= daysInMonth; i++) {
  var $day = document.createElement('div');
  $day.textContent = i;
  $days.appendChild($day);
}

但是,上述代码还不能正常显示当前日期和星期。所以,我们还需要编写一些辅助的函数,获取当前日期和星期,并根据需要对它们进行处理。下面是一个获取当前日期和星期的函数:

function getDate() {
  var now = new Date();
  var month = now.getMonth() + 1;
  var year = now.getFullYear();
  var daysInMonth = new Date(year, month, 0).getDate();
  var day = now.getDate();
  var weekDay = now.getDay();
  return { month: month, year: year, daysInMonth: daysInMonth, day: day, weekDay: weekDay };
}

接下来,我给出两个示例:

示例1:高亮显示当前的日期

这个示例要求在日历中高亮显示当前日期,我们可以在常规的日期样式基础上,通过添加CSS样式达到这个要求:

.calendar-days div.today {
  background-color: #3ea6ff;
  color: #fff;
}

然后,我们使用获取当前日期的函数,结合上述CSS样式实现日历中日期的高亮显示:

function updateCalendar() {
  var currentDate = getDate().day;
  var $days = document.querySelector('.calendar-days');
  var days = Array.from($days.children);
  days.forEach(function(day) {
    day.classList.remove('today');
    if (day.textContent === String(currentDate)) {
      day.classList.add('today');
    }
  });
}

最后,我们还需要定时器实现定时更新:

setInterval(function() {
  updateCalendar();
}, 60 * 1000);
示例2:根据星期编号计算日期

这个示例要求通过输入星期编号,可以在日历中选择任意一个日期。我们使用获取当前日期和星期的函数,结合输入的星期编号,计算出日期,并更新日历中相应的日期:

function updateCalendarByWeekday(weekday) {
  var delta = (weekday - getDate().weekDay + 7) % 7 || 7;
  var date = getDate();
  date.day += delta;
  if (date.day > date.daysInMonth) {
    date.month += 1;
    date.day -= date.daysInMonth;
  }
  updateCalendarView(date);
}

function updateCalendarView(date) {
  var $days = document.querySelector('.calendar-days');
  var days = Array.from($days.children);
  days.forEach(function(day) {
    day.remove();
  }); 
  var daysInMonth = new Date(date.year, date.month, 0).getDate();
  for (var i = 1; i <= daysInMonth; i++) {
    var $day = document.createElement('div');
    $day.textContent = i;
    $days.appendChild($day);
  }
  var $wrapper = document.querySelector('.calendar-wrapper');
  $wrapper.querySelector('.calendar-weekdays').scrollIntoView({ behavior: 'smooth' });
}

使用该函数时,我们可以添加一个输入框,让用户输入星期编号:

<div class="input-group">
  <input type="number" id="weekday-input" placeholder="Input weekday number...">
  <button type="button" onclick="updateCalendarByWeekday(+document.querySelector('#weekday-input').value)">Go!</button>
</div>

这样,我们就可以根据输入的星期编号,在日历中选择相应的日期了。

总结

至此,本文介绍了如何使用JavaScript实现简单的日历效果,经过上述代码的实现,我们可以在HTML页面看到一个基本的日历效果,并且可以通过定时器、输入框等交互方式,实现了日历中部分日期的高亮显示和自定义选择,最终实现了一个可以展示当前时间和方便选择日期的日历。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript代码实现简单日历效果 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript 基础简介 适合新手学习

    JavaScript 基础简介 适合新手学习 JavaScript 是一种广泛应用于编写网页脚本的编程语言。学习 JavaScript 对于新手来说是一项基础工作,本文章为新手介绍 JavaScript 的基础语法、数据类型、流程控制以及实例应用。 JavaScript 基础语法 JavaScript 代码可嵌入 HTML 页面的 \ 标签中。有两种方式,一…

    JavaScript 2023年5月18日
    00
  • JavaScript通过字符串调用函数的实现方法

    JavaScript可以通过字符串调用函数的方法称为函数调用方法,也就是将字符串转化成函数名称并直接调用对应的函数。下面是一些实现方法的示例说明: 1. 使用eval()函数实现字符串调用函数 使用eval()函数可以将字符串解析成JS代码并执行,从而实现字符串调用函数的方法。 // 定义需要调用的函数 function greeting(message) …

    JavaScript 2023年5月28日
    00
  • javascript Ajax获取远程url的返回判断

    Javascript Ajax获取远程Url的返回判断通常包括以下几个步骤: 1. 创建XMLHttpRequest对象 var request; if (window.XMLHttpRequest) { // 非IE浏览器 request = new XMLHttpRequest(); } else if (window.ActiveXObject) { …

    JavaScript 2023年6月11日
    00
  • 在javascript中如何得到中英文混合字符串的长度

    在javascript中计算中英文混合字符串长度,需要考虑到中文字符在计算长度时是占两个字节的。下面提供几种方法来实现计算中英文混合字符串长度的功能。 方法一:利用正则表达式匹配中文字符并计算长度 将中文字符在Unicode范围中的编码区间转换成正则表达式的形式 [\u4e00-\u9fa5],代表是包含了中文的unicode编码。 将字符串中所有的中文字符…

    JavaScript 2023年5月28日
    00
  • JavaScript动态创建div等元素实例讲解

    针对“JavaScript动态创建div等元素实例讲解”的完整攻略,我给出以下内容: 1. 动态创建元素 在 JavaScript 中,我们可以使用 document.createElement() 方法来动态创建元素。其语法格式如下: var element = document.createElement(tagName); 其中,tagName 表示要…

    JavaScript 2023年6月10日
    00
  • javascript引用类型之时间Date和数组Array

    接下来我会给你详细讲解JavaScript引用类型之时间Date和数组Array的完整攻略。 JavaScript引用类型之时间Date 在JavaScript中,时间是以Date对象的形式存在的。我们可以使用Date对象表示一个日期,也可以使用它来执行与日期相关的操作。 创建Date对象 创建一个Date对象的方式有以下三种: 使用new Date()构造…

    JavaScript 2023年5月27日
    00
  • js调试工具 Javascript Debug Toolkit 2.0.0版本发布

    JavaScript Debug Toolkit是一款网页开发调试工具,使用它可以帮助开发者快速定位及解决网页中的错误。下面是使用JavaScript Debug Toolkit的完整攻略。 安装 为了使用JavaScript Debug Toolkit,你需要将它下载到本地。你可以从GitHub上下载JavaScript Debug Toolkit的最新版…

    JavaScript 2023年6月11日
    00
  • JavaScript关于某元素点击事件的监听和触发

    下面是关于JavaScript中某元素点击事件的监听和触发的完整攻略: 监听点击事件 在JavaScript中,可以通过addEventListener方法监听元素的点击事件,方法需要两个参数,第一个参数是事件名称,第二个参数是要触发的回调函数。例如: // 获取元素 const btn = document.getElementById(‘btn’); /…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部