js实现简单日历效果

yizhihongxing

实现一个简单日历效果的方式有很多种,我这里介绍一种使用原生JavaScript实现的方法。

步骤一:HTML结构

首先,在HTML中创建一个包含日历的div,结构如下:

<div id="calendar">
  <div class="header">
    <span class="left" id="prevMonth">&#10094;</span>
    <span class="month-year" id="monthYear"></span>
    <span class="right" id="nextMonth">&#10095;</span>
  </div>
  <div class="weekdays">
    <span>Sun</span>
    <span>Mon</span>
    <span>Tue</span>
    <span>Wed</span>
    <span>Thu</span>
    <span>Fri</span>
    <span>Sat</span>
  </div>
  <div class="days" id="days"></div>
</div>

步骤二:CSS样式

为了让日历看起来更加好看,我们需要添加一些CSS样式:

#calendar {
  width: 240px;
  border: 1px solid #ccc;
  border-radius: 5px;
  background-color: #fff;
  font-size: 16px;
  text-align: center;
}

.header {
  display: flex;
  justify-content: space-between;
  padding: 10px;
  font-weight: bold;
}

.weekdays {
  display: flex;
  justify-content: space-around;
  margin-bottom: 10px;
  background-color: #eee;
}

.weekdays span {
  width: 30px;
  height: 30px;
  line-height: 30px;
}

.days {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  grid-gap: 5px;
  padding: 5px;
}

步骤三:JavaScript代码

接下来,在JavaScript中编写代码来生成日历:

const calendarDays = document.getElementById('days');
const calendarMonthYear = document.getElementById('monthYear');
const prevMonthBtn = document.getElementById('prevMonth');
const nextMonthBtn = document.getElementById('nextMonth');

let currentDate = new Date();

prevMonthBtn.addEventListener('click', () => {
  currentDate.setMonth(currentDate.getMonth() - 1);
  updateCalendar();
});

nextMonthBtn.addEventListener('click', () => {
  currentDate.setMonth(currentDate.getMonth() + 1);
  updateCalendar();
});

function updateCalendar() {
  const year = currentDate.getFullYear();
  const month = currentDate.getMonth();

  const daysInMonth = new Date(year, month + 1, 0).getDate();

  const firstDayOfMonth = new Date(year, month, 1).getDay();
  const lastDayOfMonth = new Date(year, month, daysInMonth).getDay();

  let day = 1;

  let calendarDaysHTML = ``;

  for (let i = 0; i < 6; i++) {
    let rowHTML = ``;

    for (let j = 0; j < 7; j++) {
      if (i === 0 && j < firstDayOfMonth) {
        rowHTML += `<div class="day inactive"></div>`;
      } else if (day > daysInMonth) {
        rowHTML += `<div class="day inactive"></div>`;
      } else {
        rowHTML += `<div class="day active">${day}</div>`;
        day++;
      }
    }
    calendarDaysHTML += rowHTML;
  }

  calendarDays.innerHTML = calendarDaysHTML;
  calendarMonthYear.innerHTML = `${year}年${month + 1}月`;
}

updateCalendar();

我们在这个代码中做了如下的事情:

  1. 获取HTML元素,例如日历的div、月份和日期显示的元素等。
  2. 创建一个变量来存储当前日期,初始值为当天日期。
  3. 添加事件监听器,当用户点击“上一个月”或“下一个月”按钮时,更新当前日期。
  4. 定义一个函数来生成日历,函数会使用当前日期来计算这个月有多少天、这个月的第一天和最后一天是星期几等信息,并根据这些信息来生成日历表格。
  5. 调用updateCalendar函数来生成日历表格,并将日历显示出来。

下面提供两个示例:

  • 示例一:根据用户输入的年月来显示对应的日历
const yearInput = document.getElementById('yearInput');
const monthInput = document.getElementById('monthInput');
const showCalendarBtn = document.getElementById('showCalendarBtn');

showCalendarBtn.addEventListener('click', () => {
  const year = parseInt(yearInput.value);
  const month = parseInt(monthInput.value) - 1;

  if (isNaN(year) || isNaN(month)) {
    alert('请输入正确的年份和月份!');
    return;
  }

  currentDate = new Date(year, month, 1);
  updateCalendar();
});

这段代码会先获取用户输入的年份和月份,然后当用户点击“显示日历”按钮时,将当前日期设置为用户输入的年月的第一天,并调用updateCalendar函数来显示对应的日历。

  • 示例二:为当前日期所处的月份增加一个标识
function updateCalendar() {
  const year = currentDate.getFullYear();
  const month = currentDate.getMonth();

  const daysInMonth = new Date(year, month + 1, 0).getDate();

  const firstDayOfMonth = new Date(year, month, 1).getDay();
  const lastDayOfMonth = new Date(year, month, daysInMonth).getDay();

  let day = 1;

  let calendarDaysHTML = ``;

  for (let i = 0; i < 6; i++) {
    let rowHTML = ``;

    for (let j = 0; j < 7; j++) {
      if (i === 0 && j < firstDayOfMonth) {
        rowHTML += `<div class="day inactive"></div>`;
      } else if (day > daysInMonth) {
        rowHTML += `<div class="day inactive"></div>`;
      } else {
        const currentDateObj = new Date();

        if (year === currentDateObj.getFullYear() && month === currentDateObj.getMonth() && day === currentDateObj.getDate()) {
          rowHTML += `<div class="day active today">${day}</div>`;
        } else {
          rowHTML += `<div class="day active">${day}</div>`;
        }

        day++;
      }
    }
    calendarDaysHTML += rowHTML;
  }

  calendarDays.innerHTML = calendarDaysHTML;
  calendarMonthYear.innerHTML = `${year}年${month + 1}月`;
}

在这个示例中,我们创建了一个currentDateObj对象来表示当前日期,然后在生成日历的过程中,当某一天是当前日期所处的月份的一部分时,我们为这一天的div元素添加一个“today”类,从而给这个日期增加了一个标识。

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

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

相关文章

  • CSS3 动画卡顿性能优化的完美解决方案

    下面我将详细讲解“CSS3 动画卡顿性能优化的完美解决方案”的完整攻略,包含如何开启硬件加速、动画缓存以及使用requestAnimationFrame优化动画效果。 开启硬件加速 由于 CSS3 动画处理过程中存在 CPU 资源消耗较大的问题,我们可以通过开启硬件加速来优化性能。具体的方式是利用 transform 属性进行处理,大家可以通过如下方式开启:…

    JavaScript 2023年6月11日
    00
  • js控制div弹出层实现方法

    “JS控制div弹出层实现方法”有很多种方法,以下是其中一种比较常见的方法: 1. 首先创建一个html文件,并添加CSS样式 CSS样式的作用是设置弹出层的样式和位置,实现以上功能: .popup { display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%…

    JavaScript 2023年6月11日
    00
  • 用JavaScript实现UrlEncode和UrlDecode的脚本代码

    现在我将详细讲解如何用JavaScript实现UrlEncode和UrlDecode的脚本代码。 什么是URL编码和解码 URL编码(也称为百分号编码)是将URL中的非ASCII字符替换为“%”(百分号),后跟两位十六进制数。URL解码是将带有%的十六进制编码转换为相应的字符。 URL编码和解码非常常见,它们是在处理URL(例如,将参数传递给Web服务)时必…

    JavaScript 2023年5月20日
    00
  • JavaScript实现动态添加、移除元素或属性的方法分析

    JavaScript实现动态添加、移除元素或属性的方法分析 动态添加元素 方法一:createElement()方法 我们可以使用createElement()方法来创建一个新的元素节点,然后将该节点添加到文档中的某个元素中作为其子元素。其基本语法为: document.createElement(tagName) 其中,tagName指定新节点的标签名称,…

    JavaScript 2023年6月10日
    00
  • JavaScript实现自动生成网页元素功能(按钮、文本等)

    让我们来详细讲解一下“JavaScript实现自动生成网页元素功能(按钮、文本等)”的完整攻略。 1. 需求分析 要实现自动生成网页元素功能,首先需要明确我们的需求和目标。我们的目标是在用户输入指定的元素类型和数量后,自动生成对应的HTML元素,比如按钮、文本输入框等。可以参考以下的需求分析: 需要一个表单,供用户填写元素类型和数量。表单设计可以参考以下样式…

    JavaScript 2023年6月10日
    00
  • JavaScript页面倒计时功能完整示例

    我将为您详细讲解如何实现Javascript页面倒计时功能的完整攻略,下面是完整步骤: 步骤一:准备工作 首先,在HTML页面中创建一个空白的 元素,用于展示倒计时。我们可以通过HTML代码将其嵌入到我们的页面中。 <div id="countdown"></div> 接下来,在JavaScript脚本中,我们需要…

    JavaScript 2023年5月27日
    00
  • JavaScript的内置对象Math和字符串详解

    Math是JavaScript内置的对象,它包含了数学相关的函数和属性。在编写数字计算相关的代码时,Math对象是非常有用的。本文将详细讲解Math对象的常见函数和属性以及字符串相关的内容。 Math对象 Math对象中封装了大量常用的数学函数和常量,可以用来进行随机数生成、取整、取绝对值、求平方根等一系列常用的操作。 常见函数和用法 下面是常用函数的列表:…

    JavaScript 2023年5月27日
    00
  • 比较详细的javascript DOM 学习笔记第1/2页

    你好,以下是详细的 “比较详细的JavaScript DOM学习笔记第1/2页” 完整攻略: 目录 DOM介绍 DOM节点操作 DOM样式修改 事件处理 AJAX与DOM 1. DOM介绍 DOM(文档对象模型)是指HTML文档的对象模型。浏览器加载HTML文件后,会生成一颗DOM树。这棵树包含了文档的所有元素,每个节点都是一个对象,开发者可以通过JavaS…

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