资讯专栏INFORMATION COLUMN

datepicker/calendar(价格日历|日历|日期选择器)

simpleapples / 2089人阅读

摘要:基于事件操作的价格日历,适用于端和移动端

基于事件操作的价格日历,适用于PC端和移动端
https://github.com/Fi2zz/date...

FEATURES

Base on event

Easy to display data on html element by using data event

Support double views,flat view and single view

Disabled date can be selected as end date while using setData function

Support Multi selection

RUN DEMO

</>复制代码

  1. yarn dev or npm run dev
OPTIONS
OPTION RERUIRED TYPE DESC DEFAULT VALUE
el YES string,HTMLElement Element or selector to mount DatePcker
startDate NO Date Start date of DatePicker new Date
endDate NO Date End date of DatePicker new Date() + 6 months
doubleSelect NO boolean Enable pick two dates false
limit NO number Limitation between two dates while doubleSelect is on
views NO number,string Display views of DatePicker auto,1,2
selection NO number Size of dates can be picked ,value must be not less than 2 1
NOTE

</>复制代码

  1. when `selection` is greater than 2, `bindData` and `doubleSelect` will be set to `false`,
  2. and `option.limit` will be set the same as `selection`
API

</>复制代码

  1. setDates([dates]:tuple);
  2. //Set dates to DatePicker
  3. //dates accept and
  4. setLanguage(language:any);
  5. //set DatePicker"s language
  6. setData(callback)
  7. //set data to DatePicker
  8. //more detail see [USAGE]
  9. setDisabled({
  10. days?:Array[5],
  11. dates?:Array,
  12. from?:,
  13. to?:
  14. })
  15. //Set disabled dates to DataPicker
  16. //dates =>dates accept and , all dates in [dates] will be disabled
  17. //days => days accept number of [0~6], all days in [days] will be disabled
  18. //from => from accept or , all dates after [from] date will be disabled,
  19. // eg: from = 2018-3-31 => disabled from 2018-4-1
  20. //to => to accept or all dates before [to] date will be disabled,
  21. // eg: to =2018-3-4 => all dates before 2018-3-5 will be disabled
  22. parse(formattedDate:string,dateFormat:string)
  23. //Transform date string into date object,return Date object
  24. //eg: formattedDate ="2018-3-4",format="YYYY-M-D" => new Date(2018,2,4)
  25. format(date:Date,format:string)
  26. //Transform date object into string,return string
  27. //eg: date =new Date(),format="YYYY-MM-DD" => 2018-03-04
  28. on(event:string,fn:Function)
  29. //Event listener
  30. //eg: datePicker.on("event",(result)=>{
  31. //your logic
  32. // })
USAGE

</>复制代码

  1. //es module
  2. import DatePicker from "/dist/datepicker.esm.js"
  3. import "/dist/style.css"
  4. //cjs
  5. const DatePicker =require("/dist/datepicker.js");
  6. require("/dist/style.css");
  7. //umd
  8. const date = new Date();
  9. const dist = {
  10. year: date.getFullYear(),
  11. month: date.getMonth(),
  12. date: date.getDate()
  13. };
  14. const from = new Date(dist.year, dist.month, dist.date)
  15. const to = new Date(dist.year, dist.month + 9, 0);
  16. const currDate = new Date(dist.year, dist.month, dist.date);
  17. //setup DatePicker instance
  18. const app = new DatePicker({
  19. el: document.getElementById("datepicker"),
  20. endDate:to,
  21. startDate:from,
  22. limit: 7,
  23. format: "YYYY-M-D",
  24. doubleSelect: true,
  25. views: 1,
  26. selection:4 // if selection not less than 2, doubleSelect will be disabled,
  27. //and `data` event and `setData` will not work
  28. });
  29. //`update` event fired by click on date cell and DatePicker init
  30. app.on("update", (result) => {
  31. // result contains two keys, `value` and `type`
  32. // value => selected dates
  33. // type => two types => `init` and `selected`
  34. // place your logic here
  35. //eg:
  36. // document.getElementById("dates").innerText = value
  37. });
  38. // `disabled`event fired by `setDisabled`
  39. app.on("disabled", (result) => {
  40. // result contains two keys, `dateList` and `nodeList`
  41. const {dateList, nodeList} = result;
  42. for (let n = 0; n < nodeList.length; n++) {
  43. let node = nodeList[n];
  44. if (dateList[node.getAttribute("data-date")]) {
  45. node.classList.add("disabled")
  46. }
  47. }
  48. });
  49. // "data" event fired by `setData`
  50. app.on("data", (result) => {
  51. //set HTML nodes states
  52. // result contains two keys, `data:any` and `nodeList:Array`
  53. const data = result.data;
  54. const nodeList = result.nodeList;
  55. for (let i = 0; i < nodeList.length; i++) {
  56. let node = nodeList[i];
  57. let date = node.getAttribute("data-date");
  58. if (date in data) {
  59. if (!node.classList.contains("disabled")) {
  60. let itemData = source[date];
  61. if (itemData.highlight) {
  62. addClass(node, "highlight")
  63. }
  64. let placeholder = node.querySelector(".placeholder");
  65. placeholder.innerHTML = itemData.value
  66. }
  67. } else {
  68. addClass(node, "disabled")
  69. }
  70. }
  71. });
  72. //tuple type,accept and
  73. const selected=["2018-2-21",new Date()];
  74. //use `setDates` to set init dates to DatePicker instance
  75. app.setDates(selected);
  76. // use `setDisabled` to set specified date or day to disabled,
  77. // `setDisabled` accept an object => {dates,days},
  78. // dates,accept and
  79. // >days accept 0,1,2,3,4,5,6
  80. app.setDisabled({
  81. dates: [
  82. "2018-2-18",
  83. "2018-2-19",
  84. "2018-2-22",
  85. new Date
  86. ],
  87. days: [1, 5, 2, 6],
  88. from:new Date(2018,2,10)
  89. to:"2018-7-15"
  90. });
  91. // To display your data,like price info on date cell,
  92. // use `setData` to pass data to `DatePicker` instance
  93. // `setData` function will dispatch `data` event
  94. // setup a listener to handle it
  95. app.setData(() => {
  96. const data ={};
  97. /*data accept Object like
  98. {
  99. "2018-1-31":{/*your codes * },
  100. "2018-2-21":123,
  101. }
  102. */
  103. //your logic here
  104. //return data when your logic done
  105. return data
  106. });
  107. //set DatePicker"s language
  108. //language options
  109. const language={
  110. days: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  111. months: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  112. year: ""
  113. };
  114. app.setLanguage(language)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89726.html

相关文章

  • 移动端H5日历组件,已废弃不在维护

    摘要:默认可选回调函数,绑定业务数据。例如某天有日程,则会在对应日期上标识出一个小红点或者其他标识,默认传入数据格式必选回调函数,当你点击或轻触某日期后执行。 文档维护者:孙尊路 喜欢的话,记得star 一下噢! 适用场景 该组件目前仅适用于移动端H5页面展示,后期高级用法中会讲述到如何基于日历基类实现自定义模板传入。(即:开发者只需要传入自己的模板即可实现出自己的优美的日历出来。) 本篇...

    Moxmi 评论0 收藏0
  • 怎样实现一个datePicker日期选择)组件

    摘要:百度前端技术学院上有一个任务,要实现一个日期选择组件,本文由此而来看看需求组件默认一直呈显示状态通过某种方式选择年月,选择了年月后,日期列表做相应切换通过单击某个具体的日期进行日期选择组件初始化时,可配置可选日期的上下限。 百度前端技术学院上有一个任务,要实现一个日期选择组件,本文由此而来~ 看看需求 组件默认一直呈显示状态 通过某种方式选择年、月,选择了年月后,日期列表做相应切换 ...

    layman 评论0 收藏0
  • 怎样实现一个datePicker日期选择)组件

    摘要:百度前端技术学院上有一个任务,要实现一个日期选择组件,本文由此而来看看需求组件默认一直呈显示状态通过某种方式选择年月,选择了年月后,日期列表做相应切换通过单击某个具体的日期进行日期选择组件初始化时,可配置可选日期的上下限。 百度前端技术学院上有一个任务,要实现一个日期选择组件,本文由此而来~ 看看需求 组件默认一直呈显示状态 通过某种方式选择年、月,选择了年月后,日期列表做相应切换 ...

    beanlam 评论0 收藏0
  • vue 手写一个时间选择

    摘要:实现代码于文章末尾处构思页面结构组件由输入框和日历面板组成,写好页面主体结构。输入框点击显示或隐藏日历面板方法改变布尔值控制日历面板的显示隐藏。同时,当组件销毁时,也要及时清除该监听器。 最近研究了 DatePicker 的实现原理后做了一个 vue 的 DatePicker 组件,今天带大家一步一步实现 DatePicker 的 vue 组件。 原理 DatePicker 的原理是—...

    sf_wangchong 评论0 收藏0

发表评论

0条评论

simpleapples

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<