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

yizhihongxing

下面我将详细讲解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操作文件(FileReader读取–node的fs)

    使用JS操作文件可以通过浏览器的FileReader API或Node.js的fs模块来实现。下面分别介绍这两种方式的实现方法。 使用FileReader读取文件 步骤 通过<input type=”file”>元素选择文件,获取文件的File对象 利用FileReader对象读取文件内容 将读取的文件内容显示到页面上 代码示例 <!DOC…

    JavaScript 2023年5月27日
    00
  • javascript 冒号 使用说明

    下面是关于 JavaScript 冒号的使用说明: 什么是冒号 在 JavaScript 中,冒号(:)在对象字面量中用来分隔属性名和属性值,在 ES6 中则有更多的使用方式。下面我们来逐一讲解。 对象字面量 在对象字面量中,冒号用来分隔属性名和属性值。举个例子: const person = { name: ‘Tom’, age: 18 } 在这个例子中,…

    JavaScript 2023年6月11日
    00
  • 简介JavaScript中的unshift()方法的使用

    简介JavaScript中的unshift()方法的使用 unshift()方法是JavaScript数组中的一个常用方法,它可以在数组的开头添加一个或多个元素,并返回新的数组长度。下面将详细介绍该方法的使用。 语法 array.unshift(element1[, element2[, …[, elementN]]]) 参数元素element1至ele…

    JavaScript 2023年5月27日
    00
  • 微信小程序实现页面导航的方法详解

    让我来详细讲解“微信小程序实现页面导航的方法详解”。 一、背景 在微信小程序中,实现页面导航是常见的需求之一。页面导航能够提供用户友好的浏览体验,方便用户查看和操作不同的页面。因此,在开发微信小程序时,很多页面都需要实现导航功能,比如跳转到其他页面、返回上一级页面等。 二、实现方法 微信小程序提供多种方法实现页面导航,包括路由跳转、tabBar 转发等方法。…

    JavaScript 2023年6月11日
    00
  • 异步安全加载javascript文件的方法

    异步安全加载JavaScript文件是指在保证网页性能和用户体验的同时,确保JavaScript代码能够无误地执行。下面是异步安全加载JavaScript文件的方法: 1. 异步加载JavaScript文件 异步加载JavaScript文件可以使用HTML5中的script标签,并且设置async属性。这样浏览器会异步加载脚本,不会阻塞网页的渲染,同时脚本在…

    JavaScript 2023年5月27日
    00
  • 手淘flexible.js框架使用和源代码讲解小结

    手淘flexible.js框架使用和源代码讲解小结 什么是flexible.js flexible.js是淘宝移动端自适应布局的解决方案之一。它主要实现的功能是:根据不同的屏幕宽度动态设置标签的字体大小,从而实现移动端页面的自适应布局。 使用方法 使用flexible.js,只需要在页面头部引入flexible.js即可。 <script src=&q…

    JavaScript 2023年6月11日
    00
  • JS ES6多行字符串与连接字符串的表示方法

    JS ES6多行字符串与连接字符串的表示方法可以使用模板字面量(Template literal)表示。以反引号(`)为开始和结束字符的字符串都是模板字面量。 在模板字面量中使用多行字符串,可以直接使用换行符(\n)或回车符(\r)实现,不需要使用转义符(\)。 在模板字面量中使用连接字符串,可以使用${}包裹表达式,实现字符串拼接。 以下是JS ES6多行…

    JavaScript 2023年5月28日
    00
  • Javascript Array reverse 方法

    以下是关于JavaScript Array reverse方法的完整攻略。 JavaScript Array reverse方法 JavaScript Array reverse方法用于颠倒数组中元素的顺序。该方法会变原始数组,即将原始数组中的元素顺序颠倒。 下面是一个使用reverse方法的示例: var arr = [1, 2, 3]; console.…

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