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倒计时代码汇总

    以下是详细的“JS倒计时代码汇总”的攻略。 概述 倒计时在Web开发中非常有用,比如用于处理限时优惠促销,或者用于展示一些即将到来的重要事件。本文将介绍JS倒计时的一些常用代码,帮助开发者轻松地实现倒计时功能。 普通倒计时 普通倒计时的代码非常简单,在代码中设定截止时间,然后不断更新展示倒计时的信息即可。 const deadline = new Date(…

    JavaScript 2023年5月27日
    00
  • JavaScript深拷贝的一些踩坑记录

    JavaScript深拷贝的一些踩坑记录 在 JavaScript 中,深拷贝是比较常见的操作,特别是在处理复杂的数据结构时。但是,JavaScript 中的深拷贝有很多坑点,如果处理不当,就会发生莫名其妙的错误。本文就来总结一下 JavaScript 深拷贝时常见的问题和解决方案。 为什么要进行深拷贝 在 JavaScript 中,对象是通过引用来传递的。…

    JavaScript 2023年6月10日
    00
  • 微信小程序引入Vant组件库过程解析

    下面是详细讲解如何在微信小程序中引入Vant组件库。 1. 确认小程序的基础库版本号 Vant组件库的版本以及对应的基础库版本可以在Vant官方文档中查看,确保你的小程序基础库版本符合要求。如果不符合要求,需要升级基础库版本。升级基础库版本需要注意,有可能会导致之前代码的兼容性问题,所以需要谨慎操作。 2. 在小程序项目中安装Vant组件库并引入 可以通过n…

    JavaScript 2023年6月11日
    00
  • 浅谈对于“不用setInterval,用setTimeout”的理解

    浅谈对于“不用setInterval,用setTimeout”的理解 对于JavaScript中定时器的使用,我们常常会听到这样一种建议:不要使用setInterval,而应该使用setTimeout。 为什么会这样说呢?这是因为使用setInterval存在一些风险,比如说多个定时器的执行时间可能会出现重叠,导致程序出现不可预料的异常。 相反,使用setT…

    JavaScript 2023年6月11日
    00
  • 换肤测试程序js脚本

    下面是“换肤测试程序js脚本”的完整攻略。 1. 换肤测试程序的初衷 换肤测试程序是为了让用户可以动态切换网站的主题颜色,提升用户的使用体验。其中,js脚本是实现此功能的关键之一。 2. js脚本的实现原理 js脚本的实现原理是基于动态修改网站样式,从而实现颜色主题的切换。 具体实现方式是,通过<link>标签的href属性,来替换网站样式表的地…

    JavaScript 2023年6月11日
    00
  • javascript如何创建对象

    创建对象在 JavaScript 中是一项重要的任务,以下是常用的四种方式来创建对象: 1. 对象字面量 对象字面量是创建 JavaScript 对象的一种简单方式,可以在代码中直接定义。定义对象字面量时需要使用花括号 {}。在花括号中,可以按照属性名称和对应的值的形式来定义对象的属性,多个属性之间使用逗号分隔。 let person = { name: ‘…

    JavaScript 2023年5月27日
    00
  • JavaScript创建对象的七种经典方式分享

    JavaScript创建对象的七种经典方式分享 在JavaScript中,对象是一个非常重要的概念。对象是JavaScript中唯一的复合类型,它可以用来存储和传输数据,以及实现面向对象的编程方式。在此,我们将介绍JavaScript创建对象的七种经典方式,以便您对JavaScript对象的创建有更深入的了解和应用。 1.使用对象字面量创建对象 对象字面量是…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript常量定义

    下面我将详细讲解“详解JavaScript常量定义”的完整攻略。 什么是JavaScript常量 在JavaScript中,声明一个变量的方式有两种:使用var关键字声明和使用const关键字声明。其中const声明的变量就是JavaScript常量。 常量是指在程序执行过程中其值不可变的变量。一旦用const关键字声明一个变量,就不能再对它进行赋值操作,否…

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