首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js实现滚动日历

滚动日历在网页应用中是一种常见的交互组件,它允许用户通过滚动来查看不同日期的内容。以下是关于滚动日历的基础概念、优势、类型、应用场景以及如何使用JavaScript实现一个简单的滚动日历。

基础概念

滚动日历通常由一系列日期单元格组成,这些单元格可以垂直或水平滚动。用户可以通过触摸设备上的滑动手势或鼠标滚轮来滚动日历,以查看不同日期的内容。

优势

  1. 节省空间:滚动日历可以在有限的空间内展示大量日期信息。
  2. 用户友好:用户可以通过简单的滚动动作来浏览日期,操作直观便捷。
  3. 灵活性:可以自定义显示的日期范围、样式和交互效果。

类型

  1. 垂直滚动日历:日期单元格垂直排列,用户上下滚动查看。
  2. 水平滚动日历:日期单元格水平排列,用户左右滚动查看。
  3. 混合滚动日历:结合垂直和水平滚动,提供更丰富的浏览体验。

应用场景

  • 日期选择器:在表单中提供日期选择功能。
  • 日程管理:展示用户的日程安排,方便用户查看不同日期的任务。
  • 活动日历:展示活动或事件的日期和时间。

JavaScript实现简单的垂直滚动日历

以下是一个使用HTML、CSS和JavaScript实现的简单垂直滚动日历示例:

HTML

代码语言:txt
复制
<div class="calendar-container">
  <div class="calendar-header">
    <button id="prev-month">上个月</button>
    <span id="month-year"></span>
    <button id="next-month">下个月</button>
  </div>
  <div class="calendar-body" id="calendar-body">
    <!-- 日历日期单元格将动态生成 -->
  </div>
</div>

CSS

代码语言:txt
复制
.calendar-container {
  width: 300px;
  border: 1px solid #ccc;
  overflow: hidden;
}

.calendar-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px;
  background-color: #f4f4f4;
}

.calendar-body {
  height: 400px;
  overflow-y: scroll;
  padding: 10px;
}

.calendar-day {
  height: 50px;
  border-bottom: 1px solid #eee;
}

.calendar-day:last-child {
  border-bottom: none;
}

JavaScript

代码语言:txt
复制
const calendarBody = document.getElementById('calendar-body');
const monthYear = document.getElementById('month-year');
const prevMonthBtn = document.getElementById('prev-month');
const nextMonthBtn = document.getElementById('next-month');

let currentDate = new Date();

function renderCalendar(date) {
  calendarBody.innerHTML = '';
  monthYear.textContent = date.toLocaleString('default', { month: 'long', year: 'numeric' });
  const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
  const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
  const daysInMonth = lastDay.getDate();
  const startDay = firstDay.getDay();

  let day = 1;
  for (let i = 0; i < 6; i++) { // 最多6周
    const week = document.createElement('div');
    week.className = 'calendar-week';
    for (let j = 0; j < 7; j++) {
      if (i === 0 && j < startDay) {
        const emptyCell = document.createElement('div');
        emptyCell.className = 'calendar-day empty';
        week.appendChild(emptyCell);
      } else if (day > daysInMonth) {
        break;
      } else {
        const dayCell = document.createElement('div');
        dayCell.className = 'calendar-day';
        dayCell.textContent = day;
        week.appendChild(dayCell);
        day++;
      }
    }
    calendarBody.appendChild(week);
  }
}

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

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

renderCalendar(currentDate);

解释

  1. HTML:定义了日历的基本结构,包括头部和主体部分。
  2. CSS:设置了日历的样式,包括容器、头部和日期单元格的样式。
  3. JavaScript
  • renderCalendar函数负责生成日历的日期单元格,并根据当前月份动态更新内容。
  • prevMonthBtnnextMonthBtn按钮的事件监听器允许用户通过点击按钮来切换月份。

这个示例实现了一个基本的垂直滚动日历,你可以根据需要进一步扩展和自定义功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 前端|利用js实现在日历中的签到效果

    效果介绍 日历在手机软件里是非常常见的一个功能,几乎每一个手机都有一个自带的手机日历软件。签到功能也是特别常用的,学习通、淘宝、包括学校使用的热水软件U易也都有运用。...在一些签到获取积分(或者其他奖励)的软件中,签到和日历功能常常是捆绑使用。我们今天要实现的也是签到功能和日历捆绑在一起的效果。 本次的实现效果如下图1.1: ?...图1.1 实现效果 分析实现步骤 从图1.1的效果中可以看出。...关于日历我们需要实现的效果有:①判断某一天是星期几;②判断某个月有几天;③判断某一年是平年还是闰年(即二月份是28天还是29天); 关于签到需要实现的更多的是样式的变化:①点击签到之后,签到按钮要发生变化...对日历进行实现; 关于日历功能实现的具体步骤: (1)利用HTML5代码对页面框架进行搭建: div> <div class="col-xs

    5.5K21

    js实现单张或多张图片持续无缝滚动

    背景: 想要实现图片持续滚动,既然使用js,就千万不要加css动画、过渡等相关样式,如果想要滚动的平滑一下,可以一像素一像素的感动,则很平滑,如果加了过渡动画,当图片重置为0时,会有往回倒的动画效果,跟预期不符...原理: 图片滚动原理同图片轮播原理,同样也适用于文字滚动等一系列滚动,通过复制最后一张图片或最后一堆文字插入第一行,或复制第一张图片或一堆文字插入在结尾,来实现无缝拼接,前提:1、必须是没有设置过渡动画的...,2、重置为0的时候与当前已经滚动到的高度对于图片的位置而言肉眼看上去没变化。...实现: html主要包含三块: 1、最外层盒子,用来展示滚动图的区域,overflow:hidden; 2、滚动的盒子,主要改变该盒子的定位值,来实现滚动,里面包含所有要滚动的图片或文字 3、包含图片或文字的盒子...代码: class Roll { constructor(opts) { this.elem = opts.elem; // 图片包含滚动长度的元素的 this.elemBox

    7.6K10

    JS简易整页滚动

    fullPage超简易版本 1.知识点 JS 滚动监听事件 JS 移动端touch监听事件 函数节流 DOM操作 2.示例GIF ?...CSS html, body设置 overflow 为 hidden, 让视图中只包括一个分页;设置滑动分页的长宽都是 100%; 外部容器设置 transition 过渡效果, 并设置为相对定位, 滚动是修改外部容器的...Top 值, 实现滚动效果. html, body { padding: 0; margin: 0; overflow: hidden; } .page-container { position...向下滚动时, 当 currentPosition 比 -整体分页高度 大的时候(绝对值相比小的时候), 向下滚动;向上滚动时, 当 currentPosition 大于 0 的时候, 向上滚动. /...滚动事件firefox与其他浏览器的事件不同, 所以需要进行判断. deltaY大于0的时候, 想下滚动; 反之, 向上滚动. var handlerWheel = throttle(scrollMove

    15.7K31

    JS判断滚动条是否停止滚动

    背景:昨天一个同事有种需求,有一个展示数据区域的div,带滚动条,当滚动条滚动时,需要向后台发请求,计算数据,再拿到前台展示。        ...分析:由于数据量级别较大,所以当滚动条滚动时,如果时时向后台发请求,对服务器和浏览器都造成巨大的压力。想到的解决方案是,当滚动条停止时,再去发请求计算数据。...那么问题来了,如何判断滚动条是否停止了呢?        解决:搜索了一下,js本身是无法判断滚动条是在滚动状态还是停止状态,只有通过其它方式了。...后来想到的思路是当滚动条滚动的时候,发起一个定期执行的方法,并记录一次当前滚动条到顶部的距离,这个方法中判断此时滚动条到顶部的距离是否和上次记录的相等,如果相等,那么说明停止滚动了,不相等,还在滚动。...-- // 让浏览器出现滚动条 for(var i = 0; i < 100; i++) { document.write(""); } var topValue = 0,//

    17.4K00

    python实现输出日历

    以下是使用几个简单的函数实现给定指定年月实现当月日历输出的程序,大部分内容引用自网易云课堂哈工大开设的Python程序设计入门函数一章的课后作业。 程序设计图如下: ?...get_num_of_days_in_month 获得每月的天数 get_total_num_of_days 获得自1800年1月1日以来经过的天数 get_start_day 获得每月1日为星期几 print_month_body 打印日历的数字部分...get_month_name 获得每月的名称 print_month_title 打印日历标题与头部部分 具体实现如下: # coding=utf-8 __author__ = 'Leonard'...print ' Sun Mon Tue Wed Thu Fri Sat ' def print_month_body(year, month): ''' 打印日历正文...实现起来难度不大,只是在格式控制上需要花点心思,具体详见print_month_body函数的注释。 第一次用Python编了一个有八十行的程序,希望大家多多指教。

    2.7K30

    JS魔法堂:通过marquee标签实现信息滚动效果

    根据信息滚动效果我们可以有很多的实现方式,但HTML自带的 marquee标签 是其中一个较简单的实现方式。下面记录一下,供日后查阅。...值alternate 表示在两端之间来回滚动; 值scroll 表示由一端重复滚动到另一端,为默认值; 值slide 表示由一端不重复地滚动到另一端。  direction , 滚动的方向。...loop ,滚动的次数。默认值-1表示一直滚动。 scrollAmount , 设置一次滚动的步长。默认值为6, 当设置为负数时将采用默认值进行滚动。...scrollDelay ,设置两次滚动间的延迟时间(单位:ms)。默认值为85,当设置为负数时将采用默认值进行滚动。..."> 滚动的消息 四、总结                                     当我们只需实现当条特别公告等简单信息滚动效果时,marquee标签是一个很不错的选择

    4K70
    领券