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日

相关文章

  • JS中的Map、Set、WeakMap和WeakSet

    在JavaScript中,Map、Set、WeakMap和WeakSet是四个不同的数据结构,它们都有不同的特点和用途: 1. Map :Map是一种键值对的集合,其中的键和值可以是任意类型的。与对象类似,它们可以通过键来访问值。不同之处在于,Map可以使用任意类型作为键,而对象只能使用字符串或Symbol类型作为键。Map还提供了许多有用的方法,例如siz…

    JavaScript 2023年4月27日
    00
  • VBScript编写Windows防止锁屏脚本程序

    编写Windows防止锁屏脚本程序的步骤如下: 1. 了解VBScript语言 VBScript是一种微软公司开发的脚本语言,类似于JavaScript,常用于Windows系统的管理和配置。在写Windows防止锁屏脚本程序时,我们需要了解VBScript的基本语法和常用对象属性方法,如WScript对象、Shell对象等。 2. 编写脚本 首先,我们需要…

    JavaScript 2023年6月11日
    00
  • JavaScript web网页入门级开发详解

    JavaScript Web网页入门级开发详解 本攻略旨在协助初学者学习JavaScript Web网页开发,包括以下主题: HTML基础:学会构建网页基本结构 CSS基础:学会美化网页样式 JavaScript基础:学会如何编写JavaScript代码 jQuery:学会用jQuery进行Web开发 示例项目:两个实例帮助你理解如何将知识应用到实际项目中 …

    JavaScript 2023年5月17日
    00
  • Next.js项目实战踩坑指南(笔记)

    Next.js项目实战踩坑指南(笔记) 介绍 Next.js是一个React框架,它能够帮助开发者快速构建React应用,并集成了很多有用的特性和插件,例如服务器端渲染、静态文件生成等等。在使用Next.js进行开发时,可能会遇到一些问题和坑,这篇文章主要是讲解在实际开发中可能遇到的一些问题,并提供解决方案。 坑1: 如何在Next.js中使用自定义路由 默…

    JavaScript 2023年6月11日
    00
  • Javascript Date getUTCSeconds() 方法

    以下是关于JavaScript Date对象的getUTCSeconds()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getUTCSeconds()方法 JavaScript Date对象的getUTCSeconds()方法返回日期的秒数,以协调世界时(UTC)为基准。返回值是一个0到59之间的整数。 下面是使用Date对象的g…

    JavaScript 2023年5月11日
    00
  • 原生JS实现文件上传

    下面是“原生JS实现文件上传”的详细攻略: 1. HTML结构 在HTML文件中添加一个表单,包含一个文件输入和一个提交按钮。 <form enctype="multipart/form-data"> <input type="file" name="fileInput" id=&…

    JavaScript 2023年5月27日
    00
  • 详解如何在JavaScript中使用for循环

    以下是“详解如何在JavaScript中使用for循环”的完整攻略。 1. for循环简介 for循环是一种在JavaScript中常用的循环结构,也是最基本的三种循环结构之一。for循环支持设置循环条件、循环执行语句和循环计数器的初始值,用于重复执行相同的代码块。 一般来说,for循环的语法结构如下: for (initialization; condit…

    JavaScript 2023年5月28日
    00
  • 地址栏传递中文参数乱码在js里用escape转码

    地址栏传递中文参数乱码是因为浏览器默认采用的编码方式是ASCII码(即英文字符的编码),而中文字符不在ASCII码的编码范围内,所以需要进行编码转换。其中一种解决方案是使用escape()函数对中文字符进行转码。 具体步骤如下: 在前端页面中,在传递中文参数的链接中使用escape()函数对参数进行转码。例如: <a href="exampl…

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