乐趣区

关于javascript:vue3hashcalendar一款基于vue3x开发的移动端日期时间选择组件终于来了

在大家的催更下,鸽了一天又一天,vue3-hash-calendar 终于在明天诞生了。

依照常规,先上效果图



Demo


扫描上方二维码或者请用浏览器的手机模式查看:https://www.hxkj.vip/demo/calendar/

  • 🎉 感觉好用能够给一个 star 哦~~ 🎉

仓库地址

  • github:https://github.com/TangSY/vue3-hash-calendar
  • 码云 gitee:https://gitee.com/HashTang/vue3-hash-calendar

其余版本

  • vue 2.x 版本:https://github.com/TangSY/vue-hash-calendar
  • react 版本:https://github.com/TangSY/react-hash-calendar

vue3-hash-calendar

  • 基于 vue 3.X 开发的日历组件
  • 反对手势滑动操作
  • 原生 js 开发,没引入第三方库
  • 反对疾速切换年份和月份
  • 高低滑动 切换 周 / 月 模式

    【周模式中】左右滑动可切换 上一周 / 下一周
    【月模式中】左右滑动可切换 上一月 / 下一月

装置应用阐明

npm i -S vue3-hash-calendar

// 在入口文件中(main.js),导入组件库
import vueHashCalendar from 'vue3-hash-calendar'
// 引入组件 CSS 款式
import 'vue3-hash-calendar/lib/style.css'
const app = createApp(App);
// 注册组件库
app.use(vueHashCalendar);
// 在 VUE 文件中引入组件
<vue-hash-calendar />

CDN 形式引入

// 在 index.html 退出以下两个 CDN 链接:js CDN:https://cdn.jsdelivr.net/npm/vue3-hash-calendar@{version}/lib/vue-hash-calendar.umd.js
css CDN: https://cdn.jsdelivr.net/npm/vue3-hash-calendar@{version}/lib/style.css

// 而后在 webpack 配置中,退出以下配置。externals: {'vue-hash-calendar': 'VueHashCalendar'},

API

属性 阐明 类型 默认 是否必传
visible 管制日历组件的显示或暗藏, 需应用 v-model:visible Boolean false
scrollChangeDate 管制滑动的时候是否批改选中的日期 Boolean true
model 日历组件以哪种模式展现。inline:内联的形式。dialog:弹窗的形式 String inline
defaultDatetime 指定默认工夫。 Date 以后工夫
minDate 指定日历最小日期范畴,设置之后只能在该范畴内滑动日历。 Date
maxDate 指定日历最大日期范畴,设置之后只能在该范畴内滑动日历。 Date
format 确认日期时,回调事件返回的日期格局。如“YY/MM/DD hh:mm”、“YY 年 MM 月第 DD 天,以后工夫 hh 时 mm 分”、“MM DD,YY at hh:mm F” String YY/MM/DD hh:mm
weekStart 以星期几作为日历每一周的起始星期。可选 [‘sunday’, ‘monday’, ‘tuesday’, ‘wednesday’, ‘thursday’, ‘friday’, ‘saturday’] String sunday
pickerType 选择器类型 datetime:日期 + 工夫 date:日期 time:工夫 String datetime
showTodayButton 是否显示返回今日按钮 Boolean true
isShowWeekView 是否以周视图展现组, 需应用 v-model:isShowWeekView Boolean false
isShowArrow 是否显示周月切换时的批示箭头(日历下方的小箭头),当 model 等于 inline 时失效 Boolean false
isShowAction 是否显示日历组件操作栏(标题栏) Boolean true
isShowNotCurrentMonthDay 是否展现日历中的非本月日期(灰色局部日期) Boolean true
disabledWeekView 禁用周视图(设置为 true 后,无奈高低滑动进行周 / 月切换) Boolean false
disabledDate 设置日期的禁用状态,参数为以后日期,要求返回 Boolean(禁用该日期需返回 true) Function
disabledTime 设置工夫的禁用状态,参数为以后日期,要求返回 Boolean(禁用该工夫需返回 true) Function
disabledScroll 设置日历的禁止滑动方向。可选 [‘left’, ‘right’, ‘up’, ‘down’, ‘horizontal’, ‘vertical’, true, false]。可取其一管制单个方向,其中 truefalse 管制所有方向。 Boolean, String false
markDate 须要被标记的日期,可按不同色彩不同标记类型分组标记(不分组默认蓝色)。如:[{color: ‘red’,date: [‘2019/02/25’]},{color: ‘blue’,type: ‘dot’,date: [‘2019/01/20′]},’2019/03/20’] Array []
markType 标记图案类型 dot:小圆点(日期下方小圆点标记)circle:小圆圈(日期被小圆圈突围)dot+circle:同时应用小圆点与圆圈标记 String dot
minuteStep 间隔时间。(分钟的步长) Number 1
lang 抉择的语言版本。可选值:[‘CN’, ‘EN’] String CN
changeYearFast 是否反对点击操作栏(标题栏)的日期区域疾速切换年份 Boolean false
themeColor 用于批改日历主题色 {‘main-color’: string; ‘bg-color’: string; ‘main-font-color’: string; ‘vice-font-color’: string; ‘disabled-bg-color’: string; ‘disabled-font-color’: string;}
disabledClassName 日期被禁用时的 className。用于批改日期被禁用时的默认款式 String
notCurrentMonthDayClassName 非以后展现月份日期的 className(例如日历后面几天与前面几天灰色局部)。用于批改非以后展现月份日期的默认款式 String
checkedDayClassName 日期被选中时的 className。用于批改日期被选中时的默认款式 String
todayClassName 当天日期的 className。用于批改当天日期的默认款式 String
firstDayOfMonthClassName 每月第一天的 className。用于批改每月第一天的默认款式 String

事件

事件名称 阐明 参数
change 日期扭转时,触发该事件。(返回的日期格局取决于 format 属性) (date: 日期扭转时,选中的日期)
confirm 点击确认按钮时,触发该事件,dialog 模式中才有该按钮。(返回的日期格局取决于 format 属性) (date: 点击确认按钮时,选中的日期)
click 点击日期时,触发该事件。(返回的日期格局取决于 format 属性) (date: 以后点击的日期)
touchstart 日历滑动 start 事件,同于原生该事件。 (event: touch 事件)
touchmove 日历滑动 move 事件,同于原生该事件。 (event: touch 事件)
touchend 日历滑动 end 事件,同于原生该事件。 (event: touch 事件)
slidechange 日历滑动的方向。返回值:right、left、up、down。 (direction: 滑动的方向)
calendarTypeChange 日历展现类型切换时触发。返回值:date、month、year、yearRange。 (type: 日历展现面板类型)

插槽 Slot

name 阐明
day 自定义日期内容。例如可用于增加农历之类的。配合自定义 className 应用,成果更佳!参数为 {date, extendAttr},其中 extendAttr 参数蕴含 isMarked(该日期是否被标记)、isDisabledDate(该日期是否被禁用)、isToday(该日期是否为明天)、isChecked(该日期是否被选中)、isCurrentMonthDay(该日期是否为本月日期)、isFirstDayOfMonth(该日期是否为当月第一天),可用于一些非凡需要
week 自定义星期内容。例如可用于自定义星期款式等等。参数为 {week}
arrow 自定义周月切换时的批示箭头。参数为 {show},show: 类型为 Boolen,示意以后是否为周视图
today 自定义 “ 明天 ” 按钮文字内容以及款式
confirm 自定义 “ 确定 ” 按钮文字内容以及款式
action 自定义操作栏(标题栏)内容以及款式

办法 Method

办法名称 阐明
lastMonth 切换日历到上一月
nextMonth 切换日历到下一月
lastWeek 切换日历到上一周
nextWeek 切换日历到下一周
today 返回今日。当今日被禁用时,不失效

Other

  • 在 dialog 模式中,如何显示日历组件?留神应用 v-model:visible
<vue-hash-calendar v-model:visible="isShowCalendar"></vue-hash-calendar>

// 设置为 true
this.isShowCalendar = true;
  • cdn 形式引入的组件,为什么有些属性不起作用?
 在非 webpack 开发模式下,属性名称不能应用驼峰命名。例如:isShowAction 须要写成 is-show-action.
  • 想要返回规范的英文格局日期,format 属性应该怎么写?MM DD,YY at hh:mm F
<vue3-hash-calendar format="MM DD,YY at hh:mm F" />
  • 想要返回 12 小时制的日期,format 属性应该怎么写?在格式化字符串前面加上大写 F
<vue3-hash-calendar format="YY/MM/DD hh:mm F" />
  • day slot 的根本用法
https://github.com/TangSY/vue3-hash-calendar/blob/dev/examples/FirstDayDemo.vue
  • 是否通过内部的某个按钮来触发日历的开展和收起
 能够在内部通过批改 isShowWeekView 的值来管制日历的收起与开展
  • 如何设置禁用日期?可参考源码中 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
}
  • 如何设置禁用日期?可参考源码中 App.vue 文件
// 例如禁用当初之前的工夫

/** vue 模板文件 **/
<vue-hash-calendar :disabled-time="disabledTime"></vue-hash-calendar>

/** vue methods 中的办法 **/
disabledTime(date) { // 禁用的工夫
  let hours = date.getHours()
  let minute = date.getMinutes()
  let hoursNow = new Date().getHours()
  let minuteNow = new Date().getMinutes()

  if (hours < hoursNow || (hours === hoursNow && minute < minuteNow)) {return true}
  return false
}

结语

作者:HashTang

个人空间:hxkj.vip

转载请注明出处:https://juejin.cn/post/7069756348971352078

别忘了点赞、关注、评论,反对一下哦~

如果有其余问题,或者性能上不兼容的。能够邮件沟通 t@tsy6.com,或者 github 提交 issue。

退出移动版