js实现会跳动的日历效果(完整实例)

下面我将详细讲解JS实现会跳动的日历效果的完整攻略。

简介

这是一个使用JavaScript实现会跳动的日历效果的完整示例。该例子展示了如何使用JavaScript和基本的HTML/CSS构建起一个会跳动的日历效果。

步骤

HTML结构

首先我们需要构建页面的HTML结构,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>跳动的日历效果</title>
    <style>
      /* CSS样式 */
    </style>
  </head>
  <body>
    <div class="calendar">
      <div class="calendar__header">
        <a href="#" class="calendar__prev">&#9664;</a>
        <h2 class="calendar__title">2019年11月</h2>
        <a href="#" class="calendar__next">&#9654;</a>
      </div>
      <table>
        <thead>
          <tr>
            <th>日</th>
            <th>一</th>
            <th>二</th>
            <th>三</th>
            <th>四</th>
            <th>五</th>
            <th>六</th>
          </tr>
        </thead>
        <tbody>
        </tbody>
      </table>
    </div>
  </body>
</html>

CSS样式

接下来,我们需要设置一下页面的CSS样式,代码如下:

html, body {
  margin: 0;
  padding: 0;
  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
}

.calendar {
  margin: 20px auto;
  width: 500px;
}

.calendar__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #3c3c3c;
  color: #fff;
  padding: 10px;
}

.calendar__title {
  margin: 0;
}

.calendar__prev,
.calendar__next {
  text-decoration: none;
  color: #fff;
  font-size: 24px;
  line-height: 1;
}

.calendar__prev:hover,
.calendar__next:hover {
  text-decoration: underline;
}

table {
  font-size: 14px;
  border-collapse: collapse;
  width: 100%;
}

th {
  background-color: #3c3c3c;
  color: #fff;
  font-weight: bold;
  padding: 10px 0;
  text-align: center;
}

td {
  border: 1px solid #ccc;
  padding: 5px;
  text-align: center;
}

td.inactive {
  color: #ccc;
}

td.today {
  background-color: #3c3c3c;
  color: #fff;
}

JavaScript

最后,我们需要使用JavaScript来实现会跳动的日历效果。代码如下:

const calendar = document.querySelector('.calendar');
const calendarTitle = calendar.querySelector('.calendar__title');
const calendarBody = calendar.querySelector('tbody');
const prevBtn = calendar.querySelector('.calendar__prev');
const nextBtn = calendar.querySelector('.calendar__next');

let date = new Date();
let month = date.getMonth();
let year = date.getFullYear();

// 定义一个保存日期数组的变量
let days = [];

function generateCalendarDays() {
  // 清空日期数组
  days = [];

  // 获取当月的天数
  const daysInMonth = new Date(year, month + 1, 0).getDate();

  // 获取当月的第一天是星期几
  const firstDayOfMonth = new Date(year, month, 1).getDay();

  // 获取上一个月的天数
  const daysInPrevMonth = new Date(year, month, 0).getDate();

  // 计算日期数组包含的日期
  for (let i = 1; i < firstDayOfMonth; i++) {
    days.unshift(daysInPrevMonth - i + 1);
  }
  for (let i = 1; i <= daysInMonth; i++) {
    days.push(i);
  }
  for (let i = 1; i <= 42 - days.length; i++) {
    days.push(i);
  }

  // 根据日期数组动态生成日历
  let html = '';
  days.forEach((day, index) => {
    if (index % 7 === 0) {
      html += '<tr>';
    }
    html += `<td class="${month !== date.getMonth() ? 'inactive' : ''} ${day === date.getDate() && month === date.getMonth() ? 'today' : ''}">${day}</td>`;
    if (index % 7 === 6) {
      html += '</tr>';
    }
  });
  calendarBody.innerHTML = html;

  // 设置日历标题
  calendarTitle.textContent = `${year}年${month + 1}月`;
}

generateCalendarDays();

prevBtn.addEventListener('click', () => {
  month--;
  if (month < 0) {
    month = 11;
    year--;
  }
  generateCalendarDays();
});

nextBtn.addEventListener('click', () => {
  month++;
  if (month > 11) {
    month = 0;
    year++;
  }
  generateCalendarDays();
});

setInterval(() => {
  date = new Date();
  if (date.getMonth() !== month || date.getFullYear() !== year) {
    month = date.getMonth();
    year = date.getFullYear();
    generateCalendarDays();
  } else {
    const today = calendarBody.querySelector('.today');
    if (today) {
      today.classList.remove('today');
    }
    const todayIndex = days.indexOf(date.getDate());
    const todayCell = calendarBody.querySelectorAll('td')[todayIndex];
    todayCell.classList.add('today');
  }
}, 1000);

代码中主要包含以下功能:

  • 根据当前年份和月份动态生成日历。
  • 根据用户点击按钮实现切换月份。
  • 根据当前系统时间在日历中高亮显示当日日期,同时不断刷新页面确保页面高亮日期随系统时间变化而变化。

示例说明

示例一

用户在页面中点击prev和next按钮,可以看到页面上的日历月份发生了相应的变化,并在日历中高亮显示当日日期。

示例二

用户可以将本页代码复制到自己的网页上,并根据需求修改样式和其他参数,从而实现自己想要的会跳动的日历效果。

结语

这就是本文介绍的JavaScript实现会跳动的日历效果的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现会跳动的日历效果(完整实例) - Python技术站

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

相关文章

  • javascript写的日历类(基于pj)

    这里是“javascript写的日历类(基于pj)”的完整攻略。 说明 这是一篇关于使用PJ写的Javascript日历类的攻略,PJ是一种Javascript的类库,它能简化Javascript日历类的编写过程,也更加易于管理、维护日历类。在这篇攻略中,我将介绍如何使用PJ来编写日历类,包括其基本用法和关键代码。以下是两个简单的示例,分别展示了日历类的基本…

    JavaScript 2023年5月27日
    00
  • 介绍JavaScript中Math.abs()方法的使用

    介绍JavaScript中Math.abs()方法的使用的攻略如下: 1. Math.abs()方法的概述 Math.abs()是JavaScript内置的数学函数,用于返回一个数的绝对值。接受一个参数,返回该参数的绝对值(也就是该参数的正数)。如果参数不是数值类型,则该方法会尝试将其转换为数值类型。 2. Math.abs()方法的语法 Math.abs(…

    JavaScript 2023年5月28日
    00
  • js各种验证文本框输入格式(正则表达式)

    下面是详细讲解“js各种验证文本框输入格式(正则表达式)”的完整攻略。 一、什么是正则表达式 正则表达式是一种描述字符模式的方法,可以用来匹配、搜索、替换字符串等。在JavaScript中,可以使用内置对象RegExp来创建正则表达式。 正则表达式的基本语法如下: /pattern/modifiers; 其中,pattern是要匹配的模式,modifiers…

    JavaScript 2023年6月10日
    00
  • JavaScript异常处理

    JavaScript异常处理可以帮助开发人员减少代码中的错误,提高代码的健壮性和稳定性。在 JavaScript 中,异常是由错误或异常条件引起的程序流控制中的偏差,也就是程序出了问题。 JavaScript异常处理通常使用 try-catch 语句块实现。try 语句块包含可能引发异常的代码,而 catch 语句块用于捕捉异常并处理它们。以下是一个基本的 …

    Web开发基础 2023年3月30日
    00
  • javascript中内置对象Math的介绍及用法案例

    下面是关于“javascript中内置对象Math的介绍及用法案例”的完整攻略。 什么是Math对象 Math对象是一个内置对象,提供了许多数学上的方法和常数。 常用方法 下面是一些常用的Math对象的方法: Math.abs() Math.abs()方法返回一个给定数字的绝对值。该方法接受一个参数num,可以是任何数字类型,如整数、浮点数或负数。 例如: …

    JavaScript 2023年5月27日
    00
  • asp.net实现删除DataGrid的记录时弹出提示信息

    ASP.NET 是微软公司的一种基于 .NET 框架的服务器端 Web 应用程序开发技术,而 DataGrid 是一个常用的 ASP.NET 控件之一,它能够将数据以表格的形式显示于网页上。通常在进行删除操作时,为了防止误操作和提醒用户删除的数据,我们需要弹出提示对话框。本文将为大家介绍如何实现在删除 DataGrid 中的记录时弹出提示信息。 实现步骤 添…

    JavaScript 2023年6月10日
    00
  • JS模拟面向对象全解(一、类型及传递)

    JS模拟面向对象全解(一、类型及传递)是一篇介绍JavaScript中模拟实现面向对象编程的文章。文章主要分为四个部分:类型、传递、多态和继承。在这里,我将详细讲解第一部分的完整攻略。 标题 首先,文章需要有一个清晰的标题,以便读者快速了解文章的主题。例如,根据本篇文章,“JS模拟面向对象全解(一、类型及传递)”就是一个恰当的标题。 类型 在JavaScri…

    JavaScript 2023年5月27日
    00
  • 原生JS实现小小的音乐播放器

    原生JS实现小小的音乐播放器 概述 小小的音乐播放器是一个使用原生JS实现的简单的Web音乐播放器,由于功能简单,易于理解和操作,因此适合JS初学者学习。本攻略将分为以下几个部分: 开始 HTML结构 CSS样式 JS功能 示例说明 结束 开始 首先,我们需要一个开发环境,可以使用如下几种: Notepad++ Visual Studio Code Atom…

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