基础库
标签库(按字母排序)
属性扩展
Calendar 可以实现一月、多月和整年日历功能,支持日期单选、周选和范围选择,可通过数据接口显示农历和特殊工作日、休息日,还可以与其他组件进行组合应用。日历组件也适配移动端。
Calendar 组件及其依赖库或组件列表如下:
root.calendar.css
iconfont
图标,在root.calendar.iconfont.css
中。data
目录下的calendar.csv
引用代码示例如下,可放在页面的任何地方,建议放在 HEAD 标签中:
如果需要显示农历和特殊工作日/休息日,还需要把日历数据放到数据库中,实现一个GET
接口,核心语句如下:
数据结构为:
特殊工作日和休息日的管理设置参见 Master 管理平台中的“系统” -> “Keeper 监控” -> “工作日历”。
和其他的组件一件,日历组件也通过自定义 HTML 标签实现,一般不需要写 Javascript 代码。唯一可能写代码的地方只有 事件,以下配合示例进行说明:
```html <calendar id="calendar1"></calendar> ```
注意是 `<calendar></calendar>` 而不是 `<calendar />`,虽然标签之间没有任何东西。
日历中各个部分的文字如星期的文字均可设置,见下面属性说明。
```html ```
注意`type`属性一定要设置为`calendar`。
各个部分的样式如日期的字体大小均可自行设置,见下面的样式属性说明。
```html
可通过日历属性获取已选中周的各项值,如第几周、开始日期、结束日期等。
```html ```
选中的周: 开始日期:
结束日期:
可以通过事件参数或Calendar选择器获取选中的周、开始日期和结束日期。如
可以通过 Calendar 的startDate
和endDate
属性获取选中的开始日期和结束日期。如
示例略。
示例略。
标签属性可以在自定义标签 CALEDNAR 上进行设置。
id
或name
Calendar在页面上的唯一名称。mode
Calendar日期的选择模式,可选值day
、week
、range
、none
,分别代表单选、周选、日期范围选择和仅事件模式,属性值不区分大小写。months
设置显示几个月的日历,默认值为1
,如果设置为12
,则显示整年日历。init
在多月模式下,初始月份的偏移值。例如在显示3
个月的日历时,值为-1
时默认显示上月、本月和下月,值为0
显示本月、下月和下下月,值为-2
显示上上月、上月和本月。first-day-of-week
每周的第一天是周几,默认周一,可选任意表示星期值,如MON
、SUNDAY
、星期二
、周三
、日
、5
等,如果是数字的话,0
表示周日。days-of-other-month
是否在日历中显示其他月份的日期,可选值visible
或hidden
,默认为visible
。每月日历都是6
行7
列,除当月的日期外,还会有部分上月和下月的日期,这个属性设置其他月的日期是否显示。
quick-switch
是否启用快速切换,月历时点击月标题可快速切换年和月,年历时点击年标题可以快速切换年,默认为true
。当可总年数小于4
时或月数小于months+3
时,这个属性会自动关闭。
lunar
是否显示农历,默认false
,需要扩展接口支持。作者没有使用农历算法进行转换,那个代码量要远远超过这个组件的代码本身。holiday
是否显示特殊工作日和特殊休息日(如法定节假日),默认false
,需要扩展接口支持。extension-api
扩展接口地址,仅支持GET
方式获取。接口数据已在压缩包中。仅lunar
或holiday
为true
时才生效。
icon
在INPUT
模式下,会在输入框右侧显示一个图标,这个属性用来自定义图片地址或iconfont
类名,如/images/calendar.png
或icon-calendar
。
align
在INPUT
模式下,日历弹出框的对齐方式,可选LEFT
或RIGHT
,即与输入框左侧对齐还是右侧对齐。没有居中对齐选项,真的不好看。min-date
设置允许选择的最小日期,格式yyyy-MM-dd
,支持today
关键字,默认值为1900-01-01
。max-date
设置允许选择的最大日期,格式yyyy-MM-dd
,支持today
关键字,默认值为2100-12-31
。date
在单选模式下,默认选中哪一天,格式yyyy-MM-dd
,支持today
关键字。week
在周选模式下,默认选中哪一周,格式yyyy-ww
,ww
代表周数,支持this-week
关键词。start-date
在范围选择模式下,默认选中的开始日期,格式yyyy-MM-dd
,支持today
关键字。end-date
在范围选择模式下,默认选中的结束日期,格式yyyy-MM-dd
,支持today
关键字。title-format
整年模式下,设置年份标题的格式,如yyyy年
,默认为空,即不显示。head-format
单月或多月模式下,月历头的格式,默认yyyy-MM
,如可以设置为yyyy年M月
。value-format
单月单选模式下,返回值的格式,默认为yyyy-MM-dd
,例如可以设置为yyyy/MM/dd
。week-title
周选模式下,会有一列显示第几周,这个属性用来设置这一列的标题,默认值为Week
,如可以设置为周
。week-names
星期的表头名称,中文环境默认值一、二、三、四、五、六、日
,其他语言环境默认值为Mon,Tue,Wed,Thu,Fri,Sat,Sun
。month-names
年历模式下,每个月的月份名称,中文环境默认值为一月
至十二月
,其他语言环境默认值为January
至December
。corner-names
特殊工作日和特殊休息日(如法定节假日)的名称,中文环境默认值为班,假
,其他语言环境默认值为W,R
。样式属性一般不需要设置,可直接修改 calendar.css 中对应的样式即可。考虑到可能存在某些极端的情况,Calendar 提供了这些可设置样式的属性。或者要修改样式时可以根据说明去找。
frame-class
整体日历框架的样式,默认值-calendar
title-class
整个日历的标题框DIV
样式,一般用于年历模式, 默认值-calendar-title
title-text-class
(年)标题文字样式, 默认值-calendar-title-text
head-class
月历头样式,包含导航按钮和日历标题(年月), 默认值-calendar-head
nav-class
导航TABLE
框体样式,默认值-calendar-nav
nav-month-button-class
月导航按钮(上一月/下一月)样式,默认值-calendar-nav-button
nav-year-button-class
年导航按钮(上一年/下一年)样式,默认值-calendar-nav-year-button
head-title-class
日历标题(年和月)样式,默认值-calendar-head-title
body-class
日历主体DIV
样式,默认值-calendar-body
content-class
日历内容TABLE
样式',默认值-calendar-content
corner-class
日历日期单元格的角标DIV
样式(即特殊工作日和休息日),默认值-calendar-corner
day-class
日期数字DIV
样式,默认值-calendar-day
lunar-class
农历文字样式,默认值-calendar-lunar
today-class
“今天”单元格TD
样式,默认值-calendar-today
holiday-class
休息日单元格TD
样式,默认值-calendar-holiday
workdayClass
工作日单元格TD
样式,默认值-calendar-workday
focus-day-Class
选中日期单元格TD
样式,默认值-calendar-focus-day
disabled-day-class
可选择日期区间外的日期样式,默认值-calendar-disabled-day
days-of-other-month-class
月历中其他月的日期TD
样式 -calendar-days-of-other-month
focus-start-day-class
范围选择模式下选中的开始日期样式,默认值-calendar-focus-start-day
focus-end-day-class
范围选择模式下选中的结束日期样式,默认值也是'-calendar-focus-start-day'selection-day-class
范围选择模式下选中的开始日期和结束日期之间的日期样式-calendar-selection-day
week-head-class
周序号的表头TH
样式,默认值-calendar-week-head
week-name-class
周名称TH
样式,默认值-calendar-week-name
week-row-class
周选模式下默认的行TR
样式,默认值-calendar-week-row
week-focus-row-class
周选模式下选中行TR
样式,默认值-calendar-week-focus-row
week-of-year-class
周选模式下周数字TD
样式,默认值-calendar-week-of-year
week-of-year-focus-class
周选模式下选中状态下的周数字TD
样式,默认值-calendar-week-of-year-focus
foot-class
月历底部的DIV
样式,默认值-calendar-foot
foot-button-class
月历底部按钮BUTTON
样式,如“今天”、“本月”等,默认值-calendar-foot-button
switch-frame-class
快速切换年或月框体DIV
样式,默认值-calendar-switch-frame
switch-year-option-class
年快速切换框体中的年样式,默认值-calendar-switch-year-option
switch-this-year-option-class
年快速切换框体中的今年样式,默认值-calendar-switch-this-year-option
switch-year-checked-option-class
年快速切换框体中的选中年样式,默认值-calendar-switch-year-checked-option
switch-year-head-class
月快速切换框体中的年份样式,默认值-calendar-switch-year-head
switch-month-option-class
月快速切换框体中的月份选项样式,默认值-calendar-switch-month-option
switch-this-month-option-class
月快速切换框体中的本月项样式,默认值-calendar-switch-this-month-option
switch-month-checked-option-class
月快速切换框体中的选中月样式,默认值-calendar-switch-month-checked-option
样式属性的名称建议使用中横线连字符分隔的格式,不过去掉连字符也没什么问题。在使用 Javascript 操作这个 Calendar 对象时,可以通过camel
格式属性进行调用 ,如focus-day-class
对应属性focusDayClass
,但是组件没有提供属性设置功能,如calendar.focusDayClass = 'other-class-name'
是无效的。
因为
属于自定义标签,不能通过原生的选择器如document.querySelector
来操作这个标签。Calendar 对象提供了两种格式的选择器:
$calendar('name')
这个选择器返回Calendar
对象本身,然后可以访问Caldendar
对象的属性、方法和事件。因为页面的加载顺序是页面加载完成
> 解析Calendar标签
> 通过$calendar选择
,所以$calendar
选择器要求在页面加载完成并且标签解析之后才能调用 ,一般放在$finish
函数里面。如
$listen('name')
这个选择器主要用于为 Calendar 对象设置事件。
当然也可以通过上一个选择器添加事件。
二者的区别是$listen
无需要考虑页面是否加载完成,而$calendar
必须在标签解析之后才能调用。
$s('#Calendar1')
、$a('#Calendar1,#Calendar2')
。在标签属性中已经介绍了很多属性,这些标签属性除了可以进行预设置外,都可以通过 Calendar 对象进行调用,不过标签属性在 Calenar 对象中大部分都是只读的。另外还有一些不是标签属性的 Calendar 对象属性。
几个重要的属性有:
date
单选模式下获取或设置日历的选中日期,格式yyyy-MM-dd
,可写startDate
范围选择模式下获取或设置选中的开始日期,格式yyyy-MM-dd
,可写endDate
范围选择模式下获取或设置选中的结束日期,格式yyyy-MM-dd
,可写week
周选模式下获取或设置日历的选中周,格式yyyy-ww
,可写。注意在周选模式下,startDate
和endDate
可以获取值,表示选中周的开始日期和结束日期。year
当年日历中第一个月的年份,可写month
当前日历中第一个月的月份,可写minYear
最小可选择的年份,默认为1900
,只读maxYear
最大可选择的年份,默认为2100
,只读minMonth
最小可选择的月份,默认为1900-01
,只读maxMonth
最大可选择的月份,默认为2100-12
,只读其他只读的需要在标签中进行设置且只读的属性有:
name
或id
获取日历在页面上的唯一名称mode
获取日历的选择模式,返回值有DAY
、WEEK
、RANGE
和NONE
months
获取日历同时可以显示几个月firstDayOfWeek
获取日历的第一天是周几daysOfOtherMonth
获取日历中其他月份的日期是否在显示,返回值有VISIBLE
和HIDDEN
minDate
获取可选择的最小日期,格式yyyy-MM-dd
,默认值为1900-01-01
maxDate
获取可选择的最大日期,格式yyyy-MM-dd
,默认值为2100-12-31
weekTitle
周选模式下周顺序号那一列的表头名称,默认值Week
weekNames
周名称列表,默认值['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
monthNames
月名称列表,年历的快速切换中使用,默认值['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
cornerNames
工作日和休息日角标名称,默认值为['R', 'W']
todayText
“今天”的文字,默认为Today
thisWeekText
“本周”的文字,默认为This Week
thisMonthText
“本月”的文字,默认为This Month
thisYearText
“今年”的文字,默认为This Year
quickSwitch
是否在显示快速切换,默认值为true
lunar
是否在显示显示农历,默认值为false
holiday
是否在显示特殊工作日和节假日角标,默认值为false
extensionApi
扩展Api,用以读取农历和特殊工作日/休息日另有所有的样式属性也都是只读的,不再一一列出。
在 Calendar 对象中,私有方法居多,可用的方法比较少。
getCell(date)
根据日期(格式yyyy-MM-dd
)获取日历单元格,返回CalendarCell对象,见下面的说明。注意一定是可见的单元格。yearSwitchEnabled()
年模式下年快速切换是否可用,可用年数小于4
时自动关闭。monthSwitchEnabled()
单月或多月模式下月快速切换是否可用,可用月数小于months+3
时自动关闭,months
为当前日历中可显示的月数。事件可以捕获用户对 Calendar 的操作。
onNavPrevMonth
当月历导航到上一个月时触发,可传递参数prevMonth
,参数格式为yyyy-MM
。onNavNextMonth
当月历导航到下一个月时触发,可传递参数nextMonth
,参数格式为yyyy-MM
。onNavPrevYear
当年历导航到上一年时触发,可传递参数prevYear
,格式为年份数字。onNavNextYear
当年历导航到下一年时触发,可传递参数nextYear
,格式为年份数字。onDaySelected
单选模式下选中某一天时触发,可传递参数selectedDay
,格式为yyyy-MM-dd
。onDayClick
非选择模式下点击某一天时触发,可传递参数day
,参数类型为CalendarCell
。onWeekSelected
周选模式下选中某一周时触发,可传递4
个参数:year
, weekOfYear
, startDate
, endDate
,其中year
和weekOfYear
是整数,startDate
和endDate
格式为yyyy-MM-dd
,分别表示选中周的开始日期和结束日期。onRangeStartSelected
范围选择模式下,选中开始日期时触发,传递两个参数startDate
、endDate
。当没有结束时间选中时endDate
为空。onRangeStartCanceled
范围选择模式下,取消选中开始日期时触发,传递参数endDate
,当没有结束日期选中时endDate
为空。onRangeEndSelected
范围选择模式下,选中结束日期时触发,传递两个参数startDate
、endDate
。onRangeEndCanceled
范围选择模式下,取消选中结束日期时触发,传递一个参数startDate
onRangeSelected
范围选择模式下,选择了开始日期并选中了结束日期时触发,传递两个参数startDate
、endDate
onRangeCanceled
范围选择模式下,取消选择开始日期和结束日期时触发,无参数传递另外还有一个事件onchange
,当选择的日期改变时触发,目前仅适用于日期单选,和onDaySelected
和onDayClick
事件一起触发,但是相互独立。区别是onchange
可以在属性中使用,其他的事件暂时不可以。
事件使用示例:
在事件函数中,this
关键字指向当前 Calendar 对象
CalendarCell 类主要用于操作每个日期项,比如设置角标、设置样式等,这个类的成员主要是属性。上面介绍过,通过 Calendar 对象的getCell(date)
方法获取某个日期单元格,然后可以访问或设置这个单元格的各种属性。
date
获取当前单元格的日期时间,DateTime类型,只读day
获取或设置当前单元格的日期数字,可写corner
获取或设置当前单元格的角标,可写lunar
获取或设置当前单元格的农历,可写className
获取或设置当前单元格的样式,可写dayClass
获取或设置当前单元格日期数字的样式,可写cornerClass
获取或设置当前单元格的角标样式,可写lunarClass
获取或设置当前单元格的农历样式,可写通过这个类可以为日历添加更多的功能。
参考链接