按照慣例,先上效果圖

image

image

image
react 版本同款日歷:https://github.com/TangSY/react-hash-calendar
vue-hash-calendar
- 基于 vue 2.X 開發(fā)的日歷組件
- 支持手勢滑動操作·1
- 原生 js 開發(fā),沒引入第三方庫
- 上下滑動 切換 周/月 模式
【周模式中】 左右滑動可切換 上一周/下一周
【月模式中】 左右滑動可切換 上一月/下一月
安裝使用說明
npm i vue-hash-calendar
// 在入口文件中(main.js),導(dǎo)入組件庫
import vueHashCalendar from 'vue-hash-calendar'
// 引入組件CSS樣式
import 'vue-hash-calendar/lib/vue-hash-calendar.css'
// 注冊組件庫
Vue.use(vueHashCalendar)
// 在VUE文件中引入組件
<vue-hash-calendar></vue-hash-calendar>
CDN 方式引入
//在 index.html 加入以下兩個 CDN 鏈接:
js CDN:https://cdn.jsdelivr.net/npm/vue-hash-calendar@{version}/lib/vue-hash-calendar.umd.min.js
css CDN: https://cdn.jsdelivr.net/npm/vue-hash-calendar@{version}/lib/vue-hash-calendar.css
//然后在 webpack 配置中,加入以下配置。
externals: {
'vue-hash-calendar': 'VueHashCalendar'
},
Demo

qr_code
或者請用瀏覽器的手機模式查看:https://www.hxkj.vip/demo/calendar/
- ?? 覺得好用可以給一個 star 哦~~ ??
github地址:https://github.com/TangSY/vue-hash-calendar
API
| 屬性 | 說明 | 類型 | 默認(rèn) | 是否必傳 |
|---|---|---|---|---|
| visible | 控制日歷組件的顯示或隱藏,需使用 .sync 修飾符 |
Boolean | false | 否 |
| scrollChangeDate | 控制滑動的時候是否修改選中的日期 | Boolean | true | 否 |
| model | 日歷組件以哪種形式展示。inline:內(nèi)聯(lián)的方式。dialog:彈窗的方式 | String | inline | 否 |
| defaultDatetime | 指定默認(rèn)時間。 | Date | 當(dāng)前時間 | 否 |
| minDate | 指定日歷最小日期范圍,設(shè)置之后只能在該范圍內(nèi)滑動日歷。 | Date | -- | 否 |
| maxDate | 指定日歷最大日期范圍,設(shè)置之后只能在該范圍內(nèi)滑動日歷。 | Date | -- | 否 |
| format | 確認(rèn)日期時,回調(diào)事件返回的日期格式。如“YY/MM/DD hh:mm” 、“YY 年 MM 月第 DD 天,當(dāng)前時間 hh 時 mm 分”、“MM DD,YY at hh:mm F” | String | YY/MM/DD hh:mm | 否 |
| weekStart | 以星期幾作為日歷每一周的起始星期??蛇x['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] | String | sunday | 否 |
| pickerType | 選擇器類型 datetime:日期+時間 date:日期 time:時間 | String | datetime | 否 |
| showTodayButton | 是否顯示返回今日按鈕 | Boolean | true | 否 |
| isShowWeekView | 是否以周視圖展示組件 | Boolean | false | 否 |
| isShowAction | 是否顯示日歷組件操作欄(標(biāo)題欄) | Boolean | true | 否 |
| disabledWeekView | 禁用周視圖(設(shè)置為 true 后,無法上下滑動進行周/月切換) | Boolean | false | 否 |
| disabledDate | 設(shè)置日期的禁用狀態(tài),參數(shù)為當(dāng)前日期,要求返回 Boolean (禁用該日期需返回 true) | Function | --- | 否 |
| disabledTime | 設(shè)置時間的禁用狀態(tài),參數(shù)為當(dāng)前日期,要求返回 Boolean (禁用該時間需返回 true) | Function | --- | 否 |
| disabledScroll | 設(shè)置日歷的禁止滑動方向??蛇x['left', 'right', 'up', 'down', 'horizontal', 'vertical', true, false] ??扇∑湟豢刂茊蝹€方向,其中 true 和 false 控制所有方向。 |
Boolean, String | false | 否 |
| markDate | 需要被標(biāo)記的日期,可按不同顏色不同標(biāo)記類型分組標(biāo)記(不分組默認(rèn)藍色)。如:[{color: 'red',date: ['2019/02/25']},{color: 'blue',type: 'dot',date: ['2019/01/20']},'2019/03/20'] | Array | [] | 否 |
| markType | 標(biāo)記圖案類型 dot:小圓點(日期下方小圓點標(biāo)記) circle:小圓圈(日期被小圓圈包圍) dot+circle:同時使用小圓點與圓圈標(biāo)記 | String | dot | 否 |
| minuteStep | 間隔時間。(分鐘的步長) | Number | 1 | 否 |
| lang | 選擇的語言版本??蛇x值:['CN', 'EN'] | String | CN | 否 |
| disabledClassName | 日期被禁用時的 className。用于修改日期被禁用時的默認(rèn)樣式 | String | --- | 否 |
| notCurrentMonthDayClassName | 非當(dāng)前展示月份日期的 className(例如日歷前面幾天與后面幾天灰色部分)。用于修改非當(dāng)前展示月份日期的默認(rèn)樣式 | String | --- | 否 |
| checkedDayClassName | 日期被選中時的 className。用于修改日期被選中時的默認(rèn)樣式 | String | --- | 否 |
| todayClassName | 當(dāng)天日期的 className。用于修改當(dāng)天日期的默認(rèn)樣式 | String | --- | 否 |
| firstDayOfMonthClassName | 每月第一天的 className。用于修改每月第一天的默認(rèn)樣式 | String | --- | 否 |
事件
| 事件名稱 | 說明 | 參數(shù) |
|---|---|---|
| change | 日期改變時,觸發(fā)該事件。(返回的日期格式取決于 format 屬性) | (date: 日期改變時,選中的日期) |
| confirm | 點擊確認(rèn)按鈕時,觸發(fā)該事件,dialog 模式中才有該按鈕。(返回的日期格式取決于 format 屬性) | (date: 點擊確認(rèn)按鈕時,選中的日期) |
| click | 點擊日期時,觸發(fā)該事件。(返回的日期格式取決于 format 屬性) | (date: 當(dāng)前點擊的日期) |
| touchstart | 日歷滑動 start 事件,同于原生該事件。 | (event: touch 事件) |
| touchmove | 日歷滑動 move 事件,同于原生該事件。 | (event: touch 事件) |
| touchend | 日歷滑動 end 事件,同于原生該事件。 | (event: touch 事件) |
| slidechange | 日歷滑動的方向。返回值:right、left、up、down 。 | (direction: 滑動的方向) |
插槽 Slot
| name | 說明 |
|---|---|
| day | 自定義日期內(nèi)容。例如可用于添加農(nóng)歷之類的。配合自定義 className 使用,效果更佳!參數(shù)為 { date, extendAttr },其中 extendAttr 參數(shù)包含 isMarked(該日期是否被標(biāo)記)、isDisabledDate(該日期是否被禁用)、isToday(該日期是否為今天)、isChecked(該日期是否被選中)、isCurrentMonthDay(該日期是否為本月日期)、isFirstDayOfMonth(該日期是否為當(dāng)月第一天),可用于一些特殊需求 |
| week | 自定義星期內(nèi)容。例如可用于自定義星期樣式等等。參數(shù)為 { week } |
| today | 自定義 "今天" 按鈕文字內(nèi)容以及樣式 |
| confirm | 自定義 "確定" 按鈕文字內(nèi)容以及樣式 |
| action | 自定義操作欄(標(biāo)題欄)內(nèi)容以及樣式 |
版本記錄
Other
- 在 dialog 模式中,如何顯示日歷組件?注意使用
.sync修飾符
<vue-hash-calendar :visible.sync="isShowCalendar"></vue-hash-calendar>
//設(shè)置為true
this.isShowCalendar = true;
- 想要返回標(biāo)準(zhǔn)的英文格式日期,format 屬性應(yīng)該怎樣寫?
MM DD,YY at hh:mm F
<vue-hash-calendar format="MM DD,YY at hh:mm F"></vue-hash-calendar>
- 想要返回 12 小時制的日期,format 屬性應(yīng)該怎樣寫? 在格式化字符串后面加上大寫
F
<vue-hash-calendar format="YY/MM/DD hh:mm F"></vue-hash-calendar>
- day slot 的基本用法
https://github.com/TangSY/vue-hash-calendar/blob/dev/examples/FirstDayDemo.vue
- 能否通過外部的某個按鈕來觸發(fā)日歷的展開和收起
可以在外部通過修改 isShowWeekView 的值來控制日歷的收起與展開
- 如何設(shè)置禁用日期? 可參考源碼中
App.vue文件
// 例如禁用今日之前的所有日期
/** vue模板文件 **/
<vue-hash-calendar :disabled-date="disabledDate"></vue-hash-calendar>
/** vue methods 中的方法 **/
disabledDate(date) {
let timestamp = date.getTime();
if (timestamp > new Date().getTime()) {
return true
}
return false
}
- 如果有其他問題, 或者功能上不兼容的??梢脏]件溝通 t@tsy6.com,或者 github 提交 issue。