一个简单实用的 JavaScript 日历控件源代码,不依赖第三方库,支持日期、月份、年份视图切换;支持单选、多选、范围和星期选

news2024/11/28 2:52:40

一个简单实用的 JavaScript 日历控件!原生 JavaScript 编写,不依赖任何第三方库。支持日期、月份和年份试图切换;支持单选、多选、范围和星期选择模式;界面简介、配置简单、使用方便!
完整代码下载地址:一个简单实用的 JavaScript 日历控件源代码
在这里插入图片描述

Features

  • 原生 JavaScript 代码,无任何第三方库的依赖;
  • 支持单选、多选、范围和星期选择 4 种选择方式;
  • 支持年代、月份、日期 3 中不同视图的切换;
  • 高亮显示周末日期;
  • 弹性布局,适应各种不同尺寸大小;
  • 简洁大方的 UI 界面,清爽耐看;
  • 配置灵活方便,简单易用;
  • 代码遵循 UML 规范;

Example

演示地址:https://yaohaixiao.github.io/calendar.js/

Browsers support

IE / EdgeIE / EdgeFirefoxFirefoxChromeChromeSafariSafariOperaOpera
IE9, IE10, IE11, Edgelast 10 versionslast 10 versionslast 10 versionslast 10 versions

Usage

日期视图模式

new Calendar({
  // 设置显示位置
  parent: 'dates-view',
  // 初始化显示时间
  time: '2019-6-11',
  // viewMode:
  // 0 - 日期模式(默认值)
  viewMode: 0,
  // 配置日期选择的事件处理器 onDatePick,参数如下:
  // time - 选中的日期时间
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onDatePick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择DOM:', $el)
    console.log('日历实例:', calendar)
  }
})

月份视图模式

new Calendar({
  parent: 'months-view',
  // 设置月份
  time: '2019-7',
  // viewMode:
  // 1 - 月份模式
  viewMode: 1,
  // 配置月份选择的事件处理器 onMonthPick,参数如下:
  // time - 选中的日期时间
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onMonthPick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择DOM:', $el)
    console.log('日历实例:', calendar)
  }
})

年代视图模式

new Calendar({
  parent: 'years-view',
  // 设置年份
  time: '2021',
  // viewMode:
  // 1 - 年代模式
  viewMode: 2,
  // 配置月份选择的事件处理器 onYearPick,参数如下:
  // time - 选中的日期时间
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onYearPick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择DOM:', $el)
    console.log('日历实例:', calendar)
  }
})

单选模式

new Calendar({
  // 设置显示位置
  parent: 'single-pick',
  // 初始化显示时间(默认选中时间)
  time: '2019-6-18',
  // viewMode:
  // 0 - 日期模式(默认值)
  viewMode: 0,
  // pickMode:
  // single - 单选模式
  pickMode: 'single',
  // 配置日期选择的事件处理器 onDatePick,参数如下:
  // time - 选中的日期时间
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onDatePick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择的 DOM 节点:', $el)
    console.log('日历实例:', calendar)
  },
  // 配置今天选择的事件处理器 onTodayPick,参数如下:
  // 1. 先切换到日期试图模式;
  // 2. 触发日期选择的业务逻辑;
  onTodayPick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择的 DOM 节点:', $el)
    console.log('日历实例:', calendar)
  }
})

多选模式

new Calendar({
  // 设置显示位置
  parent: 'multiple-pick',
  // 初始化显示时间(默认选中时间)
  time: '2019-6-19',
  // viewMode:
  // 0 - 日期模式(默认值)
  viewMode: 0,
  // pickMode:
  // multiple - 多选模式
  pickMode: 'multiple',
  // 配置日期选择的事件处理器 onDatePick,参数如下:
  // time - 选中的多个日期(已排序)时间
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onDatePick: function (time, $el, calendar) {
    console.log('选择时间:' + time)
    console.log('选择的 DOM 节点:' + $el)
    console.log('日历实例:' + calendar)
  },
  // 配置今天选择的事件处理器 onTodayPick,参数如下:
  // 1. 先切换到日期试图模式;
  // 2. 触发日期选择的业务逻辑;
  onTodayPick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择的 DOM 节点:', $el)
    console.log('日历实例:', calendar)
  }
})

范围选择模式

new Calendar({
  // 设置显示位置
  parent: 'range-pick',
  // 初始化显示时间(默认选中时间)
  time: '2019-6-20',
  // viewMode:
  // 0 - 日期模式(默认值)
  viewMode: 0,
  // pickMode:
  // range - 多选模式
  pickMode: 'range',
  // 配置日期选择的事件处理器 onDatePick,参数如下:
  // time - 选中的日期时间范围
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onDatePick: function (time, $el, calendar) {
    console.log('选择时间:' + time)
    console.log('选择的 DOM 节点:' + $el)
    console.log('日历实例:' + calendar)
  },
  // 配置今天选择的事件处理器 onTodayPick,参数如下:
  // 1. 先切换到日期试图模式;
  // 2. 触发日期选择的业务逻辑;
  onTodayPick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择的 DOM 节点:', $el)
    console.log('日历实例:', calendar)
  }
})

星期选择模式

new Calendar({
  // 设置显示位置
  parent: 'week-pick',
  // 初始化显示时间(默认选中时间)
  time: '2019-6-21',
  // viewMode:
  // 0 - 日期模式(默认值)
  viewMode: 0,
  // pickMode:
  // week - 多选模式
  pickMode: 'week',
  // 配置日期选择的事件处理器 onDatePick,参数如下:
  // time - 选中的日期时间范围
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onDatePick: function (time, $el, calendar) {
    console.log('选择时间:' + time)
    console.log('选择的 DOM 节点:' + $el)
    console.log('日历实例:' + calendar)
  },
  // 配置今天选择的事件处理器 onTodayPick,参数如下:
  // 1. 先切换到日期试图模式;
  // 2. 触发日期选择的业务逻辑;
  onTodayPick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择的 DOM 节点:', $el)
    console.log('日历实例:', calendar)
  }
})

部件可见的配置

new Calendar({
  // 设置显示位置
  parent: 'visible-view',
  // 初始化显示时间
  time: '2019-7-11',
  // viewMode:
  // 0 - 日期模式(默认值)
  viewMode: 0,
  // 不显示切换按钮
  hasSwitcher: false,
  // 不显示页脚
  hasFooter: false,
  // 已经设置了不显示页脚,hasClock 也就无需配置了
  // hasClock: false,
  // 配置日期选择的事件处理器 onDatePick,参数如下:
  // time - 选中的日期时间
  // $el - 点击的 DOM 节点
  // calendar - 日历控件的实例
  onDatePick: function (time, $el, calendar) {
    console.log('选择时间:', time)
    console.log('选择DOM:', $el)
    console.log('日历实例:', calendar)
  }
})

API

Options

parent

Type: String

Default: calendar

可选,用来指定显示日历控件的 DOM 节点的 ID。

time

Type: String|Number

Default: 今天

可选,用来指定日历控件初始化显示的时间字符串或者表示时间的数字。

viewMode

Type: Number

Default: 0

可选,用来指定日历控件初始化显示的显示模式:

  • 0 - 日期显示模式;
  • 1 - 月份显示模式;
  • 2 - 年代显示模式;

pickMode

Type: String

Default: single

可选,用来指定日历控件的选择模式:

  • ‘single’ - 单选模式(默认值);
  • ‘multiple’ - 多选模式;
  • ‘range’ - 范围选择模式;
  • ‘week’ - 星期模式;

hasSwitcher

Type: Boolean

Default: true

可选,用来指定日历控件是否显示上下切换按钮(需要多日历显示时,可以配置为false)。

hasFooter

Type: Boolean

Default: true

可选,用来指定日历控件是否显示页脚(当前日期和时间)。

hasClock

Type: Boolean

Default: true

可选,用来指定日历控件是否显示当前时间。

onDatePick

Type: Function

Default: Empty Function

可选,选择日期后的事件处理器。参数如下:

  • time - 选中的日期字符串信息(例如:‘2019-06-18’),多选(多选、范围、星期)模式下则为选中的日期范围的数组(例如:‘[2019-6-18, 2019-6-22]’);
  • $el - 选中的 DOM 节点;
  • calendar - 日历控件实例;

(说明:将日历控件作为日期选择器的时候需要配置此信息)

onMonthPick

Type: Function

Default: Empty Function

可选,选择月份后的事件处理器。参数如下:

  • time - 选中的月份字符串信息(例如:‘2019-06’);
  • $el - 选中的 DOM 节点;
  • calendar - 日历控件实例;

onYearPick

Type: Function

可选,选择年份后的事件处理器。参数如下:

  • time - 选中的年份字符串信息(例如:‘2019’);
  • $el - 选中的 DOM 节点;
  • calendar - 日历控件实例;

Default: Empty Function

onTodayPick

Type: Function

Default: Empty Function

可选,选择今天后的事件处理器。参数如下:

  • time - 今天的字符串信息(例如:‘2019-06-18’);
  • $el - 选中的 DOM 节点;
  • calendar - 日历控件实例;

DAYS

Type: Array

Default: ['日','一','二','三','四','五','六']

常量,星期栏的显示信息(如果想显示英文信息,可以调整这里的文本)。

STYLES

Type: Object

常量,日历控件各个 DOM 节点的样式(如果希望自定义皮肤,可以针对性的调整配置)。

在这里插入图片描述
完整代码下载地址:一个简单实用的 JavaScript 日历控件源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java计算机毕业设计ssm招聘信息管理平台9kvyw(附源码、数据库)

java计算机毕业设计ssm招聘信息管理平台9kvyw(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

终于有P8大佬把困扰我多年的《计算机网络原理》全部讲明白了

前言 为什么网络协议这么重要呢?集群规模一大,我们首先想到的就是网络互通的问题;应用吞吐量压不上去,我们首先想到的也是网络互通的问题。所以,要成为技术牛人,搞定大系统,一定要过网络这一关&…

投影仪可以当电视看吗?告诉你好用的电视应用市场,建议收藏

当初在买投影仪和买电视中纠结了很久,最终选择了投影仪,现在又想看电视了……但是又不想再买个电视,那么问题来了,投影仪可以当电视用吗?经过本人一番研究,终于找到投影仪看电视的最简单方法:安…

Go C 编程 第3课 魔法自动机

慧通教育 慧通教育 30.画奔驰车标志(魔法学院第3课) 难度:1 登录 31.画拱型(魔法学院第3课) 难度:1 登录 32.画正三角形(魔法学院第3课) 难度:1 登录 33.画棱形(魔法学院第3课) 难度:1 登录 魔法学院的奇幻之旅:…

「安全狗漏洞通告」Fortinet SSL VPN远程代码执行漏洞解决方案

安全狗应急响应中心监测到,Fortinet发布了FortiOS SSL-VPN的风险通告,漏洞等级:高危,漏洞评分:9.3。漏洞编号:CVE-2022-42475。 安全狗应急响应中心建议广大用户做好资产自查以及预防工作,以免遭…

理解DDR Part 1

DDR x4 x8 x16 x4 x8 x16 指的上图黑色的chip输出的位宽,正常的DDR bus width 需要64bit,所以 chip width x4 x8 x16 黑色chip数量 16 8 4 上图是最常见的x8,也就有8个黑色的chip颗粒。x16的性能和x8的性能相比怎么样呢? 更差&…

html悬浮事件(表格th)

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <h4>一行三列:</h4> <table border"1"> <tbody class"fileLi…

UE5笔记【十三】蓝图系统-血量控制系统

上一篇我们讲解了&#xff0c;蓝图中的函数功能。可以将蓝图中重复的代码&#xff0c;再次利用。演示了Smasher的效果。 这一篇中&#xff0c;我们讲解Smasher造成伤害之后&#xff0c;如何保存和计算角色的血量状态。 我们的设计思路是&#xff1a;smasher每次碰到角色是&am…

GCSE英语语言考试-角色定位

What is characterisation? 什么是角色定位&#xff1f; Characterisation is the way writers create characters and make them believable. When writing about texts, it is easy to treat characters as real people. Try to remember that the author is creating chara…

大数据 finalshell免密登录

私有云 查看私有云创建的虚拟机 本机用FinalShell连接三个虚拟机 使用浮动IP地址创建连接 设置主机名 maser虚拟机 slave1虚拟机 slave2虚拟机 IP地址与主机名映射 master虚拟机 slave1虚拟机 slave2虚拟机 ##关闭防火墙 关闭防火墙&#xff1a;systemctl stop f…

LeaRun.net代码生成器 一键生成前后端代码

自动代码生成是指根据自然语言的功能描述来生成代码。在项目开发过程中&#xff0c;有很多业务模块的代码是具有一定规律性的&#xff0c;例如controller控制器、service接口、service实现类、mapper接口、model实体类等等&#xff0c;这部分代码可以使用代码生成器生成&#x…

一种通过刷写替换boot的方法

写在前面的废话 众所周知,ECU软件包括BOOT和APP两部分,一般来说,boot是固化的软件,改动可能性很小,一般用来更新APP,但是,如果有一天boot真的需要更新呢,而且是大批量的更新,真的需要一个个的开盖烧录吗,有没有一种便捷的方式去实现boot的替换呢?下面提供一种boot替…

手把手教你使用SpringBoot做一个员工管理系统【配置篇】

手把手教你使用SpringBoot做一个员工管理系统【配置篇】1.导入资源2.编写pojo层3.编写dao层4.首页实现5.页面国际化1.导入资源 导入前端文件&#xff1a; 管理系统前端源码下载地址 将下载的前端文件导入到SpringBoot资源目录&#xff1a; 导入Maven依赖&#xff1a;&#x…

iOS微信8.0.31更新,带来7个功能

近日&#xff0c;iOS微信更新了8.0.31正式版。经过几天的深入体验&#xff0c;我发现了7个新特性。如果你还没有升级&#xff0c;我们就往下看吧。 功能一&#xff1a;优化编辑按钮 微信发图片&#xff0c;发送前可以编辑&#xff0c;底部的编辑按钮变了。新版画笔工具变成了钢…

数据驱动测试-从方法探研到最佳实践

作者&#xff1a;刘红妍 导读 在自动化测试实践中&#xff0c;测试数据是制造测试场景的必要条件&#xff0c;本文主要讲述了在沟通自动化框架如何分层&#xff0c;数据如何存储&#xff0c;以及基于单元测试pytest下如何执行。并通过实践案例分享&#xff0c;提供数据驱动测…

qq录制视频保存到哪了?qq录制视频怎么没了?找回方法在这

相信很多小伙伴都跟小编一样&#xff0c;使用qq录屏录制好后&#xff0c;结果就怎么也找不到录屏的文件了。经过小编一番研究&#xff0c;终于找到了qq录屏后视频文件的所保存的文件路径了。qq录制视频保存到哪了&#xff1f;别担心&#xff0c;下面小编就带大家一起来找找看。…

VS代码片段(CodeSnippet)的制作以及常用代码片段记录

总目录 文章目录总目录前言一、代码片段是什么&#xff1f;1.了解2.查找代码片段文件夹二、编写代码片段1.认识代码片段2.编写自定义代码片段1、trycf (try,catch,finally)2、propp&#xff08;用于MVVMLight中&#xff09;3、ts &#xff08;创建一个test方法&#xff09;3.使…

零基础入门:实时音视频技术基础知识全面盘点

1、引言 随着移动网络速度越来越快、质量越来越来&#xff0c;实时音视频技术已经在各种应用场景下全面开花&#xff0c;语音通话、视频通话、视频会议、远程白板、远程监控等等。 实时音视频技术的开发也越来越受到重视&#xff0c;但是由于音视频开发涉及知识面比较广&…

可视化搭建,1天开发1款“智慧楼宇”应用

随着我国城市建设的飞速发展&#xff0c;现代建筑正朝着智能化和网络化不断前进。物联网技术、智能化技术使得建筑内众多公共资源具有语境感知能力&#xff0c;现代建筑进入了智慧楼宇阶段。 天翼物联推出智慧楼宇应用&#xff0c;为物业等管理单位提供安全监控、能源监控、智慧…

【DBN分类】基于哈里斯鹰算法优化深度置信网络HHO-DBN实现数据分类附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …