日曆 / 日期選擇器
日曆是一個觸控最佳化的元件,提供處理日期的簡易方式。
日曆可用作內嵌元件或疊加層。疊加層日曆在平板電腦(iPad)上會自動轉換為彈出視窗。
日曆應用程式方法
讓我們看看相關的應用程式方法,以使用日曆
app.calendar.create(參數)- 建立日曆執行個體
- 參數 - 物件。包含日曆參數的物件
方法傳回建立的日曆執行個體
app.calendar.destroy(el)- 銷毀日曆執行個體
- el - HTMLElement 或 字串(包含 CSS 選擇器)或 物件。要銷毀的日曆元素或日曆執行個體。
app.calendar.get(el)- 透過 HTML 元素取得日曆執行個體
- el - HTMLElement 或 字串(包含 CSS 選擇器)。日曆元素。
方法傳回日曆執行個體
app.calendar.close(el)- 關閉日曆
- el - HTMLElement 或 字串(包含 CSS 選擇器)。要關閉的日曆元素。
方法傳回日曆執行個體
例如
var calendar = app.calendar.create({
inputEl: '#calendar-input'
});
日曆參數
讓我們看看所有可用的日曆參數清單
參數 | 類型 | 預設值 | 說明 |
---|---|---|---|
locale | 字串 | 日曆語言環境。應為 例如 | |
value | 陣列 | 包含初始選取日期的陣列。每個陣列項目都代表選取的日期 | |
disabled | 日期範圍 | 其他停用日期。參數接受所謂的日期範圍(詳情請見下方) | |
事件 | 日期範圍 | 有事件的日期。將在日曆日期上標記其他「點」。參數接受所謂的日期範圍(詳情請見下方)。 如果您要指出當天有幾個不同的事件,可以使用多個不同顏色的點來指出。在這種情況下,您需要將日期範圍傳遞為陣列,其中每個物件都有
| |
rangesClasses | 陣列 | 您要為其新增自訂 CSS 類別的日期範圍以進行其他樣式設定。請見下方以了解可接受的格式 | |
formatValue | 函數 (values) | 用於格式化輸入值的函數,應傳回新的/格式化的字串值。values 是陣列,其中每個項目都代表所選日期。可以用來取代 dateFormat 參數以指定自訂格式 | |
monthNames | 陣列 | auto | 包含完整月份名稱的陣列。如果為 auto ,則會根據指定的 locale (或瀏覽器 locale)顯示月份名稱 |
monthNamesShort | 陣列 | auto | 包含簡短月份名稱的陣列。如果為 auto ,則會根據指定的 locale (或瀏覽器 locale)顯示月份名稱 |
dayNames | 陣列 | auto | 包含星期幾名稱的陣列。如果為 auto ,則會根據指定的 locale (或瀏覽器 locale)顯示星期幾名稱 |
dayNamesShort | 陣列 | auto | 包含星期幾簡稱的陣列。如果為 auto ,則會根據指定的 locale (或瀏覽器 locale)顯示星期幾名稱 |
firstDay | 數字 | 1 | 星期中的第一天。預設為 1 - 星期一 |
weekendDays | 陣列 | [0, 6] | 包含週末日期索引號碼的陣列,預設為星期六和星期日 |
dateFormat | 字串 物件 | 未定義 | 如果未定義,它將使用基於 它可以接受 例如 或者您可以傳遞包含特殊代碼的字串,可用的表達式
當
|
多重 | 布林值 | false | 啟用以允許選擇多個日期/值 |
rangePicker | 布林值 | false | 啟用以啟用範圍選擇器。與 multiple 不相容 |
rangePickerMinDays | 數字 | 1 | 當 rangePicker 啟用時,需要選擇的最少天數 |
rangePickerMaxDays | 數字 | 0 | 當 rangePicker 啟用時,允許選擇的最大天數。0 表示沒有最大值 |
方向 | 字串 | 'horizontal' | 月份佈局方向,可以是 'horizontal' 或 'vertical' |
minDate | 日期 | null | 允許的最小日期 |
maxDate | 日期 | null | 允許的最大日期 |
touchMove | 布林值 | true | 如果啟用,則在觸控移動期間,日曆月份會跟著手指滑動 |
animate | 布林值 | true | 啟用月份之間的轉場 |
closeOnSelect | 布林值 | false | 啟用,當使用者選擇日期時,日曆會關閉 |
weekHeader | 布林值 | true | 啟用星期標頭,顯示星期名稱的簡稱 |
monthSelector | 布林值 | true | 在工具列中啟用月份選擇器 |
monthPicker | 布林值 | true | 在工具列中啟用月份選擇器,當使用者按一下月份選擇器時,可以選擇月份 |
yearSelector | 布林值 | true | 在工具列中啟用年份選擇器 |
yearPicker | 布林值 | true | 在工具列中啟用年份選擇器,當使用者按一下年份選擇器時,可以選擇年份 |
yearPickerMin | 數字 | 年份選擇器的最小可用年份,預設為今日減去 100 年 | |
yearPickerMax | 數字 | 年份選擇器的最大可用年份,預設為今日加上 100 年 | |
timePicker | 布林值 | false | 啟用時間選擇器。 |
timePickerFormat | 物件 | {hour: 'numeric', minute: 'numeric'} | 時間選擇器中顯示的時間格式。它接受
|
timePickerPlaceholder | 字串 | 選擇時間 | 在時間選擇器 placeholder 中顯示的文字。 |
容器/開啟器特定參數 | |||
containerEl | 字串 HTMLElement | 字串包含 CSS 選擇器或 HTMLElement,用於放置產生的日曆 HTML。僅用於內嵌日曆 | |
openIn | 字串 | auto | 可以是 auto 、popover (在彈出視窗中開啟日曆)、sheet (在 sheet 模式中開啟)或 customModal (在自訂日曆模式覆疊中開啟)。如果是 auto ,則會在小螢幕上以 sheet 模式開啟,在大螢幕上以彈出視窗開啟。 |
sheetPush | 布林值 | false | 啟用日曆 sheet 在開啟時推動後面的檢視 |
sheetSwipeToClose | 布林值 | 未定義 | 啟用使用滑動關閉日曆 sheet 的功能。未指定時,它會繼承應用程式的 Sheet swipeToClose 參數 |
inputEl | 字串或 HTMLElement | 字串包含 CSS 選擇器或 HTMLElement,其中包含相關的輸入元素 | |
scrollToInput | 布林值 | true | 在日曆開啟時將視窗(頁面內容)捲動到輸入 |
inputReadOnly | 布林值 | true | 在指定的輸入上設定「readonly」屬性 |
cssClass | 字串 | 要在日曆元素上設定的附加 CSS 類別名稱 | |
closeByOutsideClick | 布林值 | true | 如果啟用,則會在點選選擇器或相關輸入元素之外的地方關閉選擇器 |
toolbar | 布林值 | true | 啟用日曆工具列 |
toolbarCloseText | 字串 | 完成 | 完成/關閉工具列按鈕的文字 |
header | 布林值 | false | 啟用日曆標頭 |
headerPlaceholder | 字串 | 選擇日期 | 預設日曆標頭 placeholder 文字 |
routableModals | 布林值 | false | 會將開啟的日曆加入路由記錄,這能讓使用者透過回到路由記錄並將目前路由設定為日曆模式來關閉日曆 |
url | 字串 | date/ | 會設定為目前路由的日曆模式 URL |
view | 物件 | 在啟用 routableModals 時設定路由的檢視。預設為 inputEl 的父檢視,如果找不到父檢視,則為主要檢視 | |
backdrop | 布林值 | 啟用日曆背景(背景為深色半透明圖層)。預設只有在日曆以彈出視窗開啟時才會啟用。 | |
closeByBackdropClick | 布林值 | true | 啟用時,點選背景會關閉日曆 |
渲染函數 | |||
renderWeekHeader | 函數 | 渲染星期標題的函數。必須回傳星期標題的 HTML 字串 | |
renderMonths | function(date) | 渲染月份包裝器的函數。必須回傳月份容器的完整 HTML 字串 | |
renderMonth | function(date, offset) | 渲染單一月份的函數。必須回傳單一月份的 HTML 字串 | |
renderMonthSelector | 函數 | 渲染月份選擇器的函數。必須回傳月份選擇器的 HTML 字串 | |
renderYearSelector | 函數 | 渲染年份選擇器的函數。必須回傳年份選擇器的 HTML 字串 | |
renderHeader | 函數 | 渲染日曆標題的函數。必須回傳日曆標題的 HTML 字串 | |
renderToolbar | 函數 | 渲染工具列的函數。必須回傳工具列的 HTML 字串 | |
render | 函數 | 渲染整個日曆的函數。必須回傳日曆的完整 HTML 字串 | |
事件 | |||
on | 物件 | 包含事件處理常式的物件。例如
|
請注意,所有下列參數都可以在 calendar
屬性下的全域應用程式參數中使用,以設定所有日曆的預設值。例如
var app = new Framework7({
calendar: {
url: 'calendar/',
dateFormat: 'dd.mm.yyyy',
}
});
日期範圍
某些日曆參數 (disabled、events 和 rangesClasses) 接受所謂的日期範圍。這是一種指定並涵蓋所有可能日期組合的簡單方法。
它可以是包含日期的陣列,例如
var calendar = app.calendar.create({
...
// Disabled 10th November 2015 and 11th November 2015:
disabled: [new Date(2015, 10, 10), new Date(2015, 10, 11)],
...
});
它可以是自訂函數,您需要回傳 true 或 false
var calendar = app.calendar.create({
...
//Disabled all dates in November 2015
disabled: function (date) {
if (date.getFullYear() === 2015 && date.getMonth() === 10) {
return true;
}
else {
return false;
}
},
...
});
或包含 from 和 to 屬性的物件
var calendar = app.calendar.create({
...
//Disable all dates between 1st October 2015 and 31 December 2015
disabled: {
from: new Date(2015, 9, 1),
to: new Date(2015, 11, 31)
},
...
});
或僅包含 from 或 to 屬性的物件
var calendar = app.calendar.create({
...
//Disable everyting since December 2015
disabled: {
from: new Date(2015, 11, 1)
},
...
});
或包含 date
屬性的物件
var calendar = app.calendar.create({
...
// Disabled 1th December 2015
disabled: {
date: new Date(2015, 11, 1)
},
...
});
或包含混合日期和物件的陣列
var calendar = app.calendar.create({
...
events: [
new Date(2015, 9, 1),
new Date(2015, 9, 5),
{
from: new Date(2015, 9, 10),
to: new Date(2015, 9, 15)
},
{
from: new Date(2015, 9, 20),
to: new Date(2015, 9, 31)
},
{
date: new Date(2015, 11, 1),
color: '#ff0000'
},
// same date but one more color dot will be added
{
date: new Date(2015, 11, 1),
color: '#00ff00'
},
],
...
});
rangesClasses
rangesClasses 參數接受包含日期範圍和此範圍類別名稱的物件陣列
var calendar = app.calendar.create({
...
//Add classes for november and october
rangesClasses: [
//Add "day-october' class for all october dates
{
// string CSS class name for this range in "cssClass" property
cssClass: 'day-october', //string CSS class
// Date Range in "range" property
range: function (date) {
return date.getMonth() === 9
}
},
//Add "day-holiday" class for 1-10th January 2016
{
cssClass: 'day-holiday',
range: {
from: new Date(2016, 0, 1),
to: new Date(2016, 0, 10)
}
}
],
...
});
日曆方法和屬性
初始化日曆後,我們在變數中擁有其初始化的執行個體 (例如上述範例中的 calendar
變數),其中包含有用的方法和屬性
屬性 | |
---|---|
calendar.app | 連結到全域應用程式執行個體 |
calendar.containerEl | 日曆包裝容器 HTML 元素 (當使用內嵌日曆時) |
calendar.$containerEl | 包含日曆包裝容器 HTML 元素的 Dom7 執行個體 (當使用內嵌日曆時) |
calendar.el | 日曆 HTML 元素 |
calendar.$el | 包含日曆 HTML 元素的 Dom7 執行個體 |
calendar.inputEl | 日曆輸入 HTML 元素(傳入 inputEl 參數) |
calendar.$inputEl | 包含日曆輸入 HTML 元素的 Dom7 實例(傳入 inputEl 參數) |
calendar.value | 陣列,其中每個項目代表選取的日期 |
calendar.currentMonth | 日曆檢視目前月份。數字,範圍從 0 到 11 |
calendar.currentYear | 日曆檢視目前年份。數字,例如 2020 |
calendar.opened | 如果日曆目前已開啟,則為 true |
calendar.inline | 當使用內嵌日曆時為 true |
calendar.cols | 包含指定日曆欄的陣列。每個欄也有自己的方法和屬性(請參閱下方) |
calendar.url | 日曆 URL(傳入 url 參數) |
calendar.view | 日曆檢視(傳入 view 參數)或找到父檢視 |
calendar.params | 包含初始化參數的物件 |
calendar.allowTouchMove | 將此旗標設為 false 以防止初始化後觸控移動互動 |
方法 | |
calendar.setValue(values) | 設定新的選取日期。values 是陣列,其中每個項目代表選取的日期 |
calendar.getValue() | 傳回目前的日曆值 |
calendar.addValue() | 將值新增至值陣列。當啟用多重選取(使用 multiple: true 參數)時,這很有用 |
calendar.update() | 重新呈現日曆。當您動態新增/變更值且需要更新日曆配置時,這很有用 |
calendar.nextMonth(duration) | 日曆轉換至下個月,指定 duration 以毫秒為單位 |
calendar.prevMonth(duration) | 日曆轉換至上個月,指定 duration 以毫秒為單位 |
calendar.nextYear() | 日曆轉換至下一年 |
calendar.prevYear() | 日曆轉換至上一年 |
calendar.setYearMonth(year, month, duration) | 日曆轉換至指定的 year 、month ,指定 duration 以毫秒為單位 |
calendar.open() | 開啟日曆 |
calendar.close() | 關閉日曆 |
calendar.destroy() | 銷毀日曆實例並移除所有事件 |
calendar.on(event, handler) | 新增事件處理常式 |
calendar.once(event, handler) | 新增事件處理常式,在觸發後將會移除 |
calendar.off(事件, 處理函式) | 移除事件處理函式 |
calendar.off(事件) | 移除指定事件的所有處理函式 |
calendar.emit(事件, ...args) | 在實例上觸發事件 |
日曆事件
日曆會在日曆元素上觸發下列 DOM 事件,以及在 app 和日曆實例上觸發事件
DOM 事件
事件 | 目標 | 說明 |
---|---|---|
calendar:open | 日曆元素<div class="calendar"> | 當日曆開始開啟動畫時,將觸發事件 |
calendar:opened | 日曆元素<div class="calendar"> | 當日曆完成開啟動畫後,將觸發事件 |
calendar:close | 日曆元素<div class="calendar"> | 當日曆開始關閉動畫時,將觸發事件 |
calendar:closed | 日曆元素<div class="calendar"> | 當日曆完成關閉動畫後,將觸發事件 |
App 和日曆實例事件
日曆實例會在自身實例和 app 實例上發出事件。App 實例事件具有相同的名稱,但前面加上 calendar
。
事件 | 目標 | 參數 | 說明 |
---|---|---|---|
dayClick | 日曆 | (日曆、dayEl、年、月、日) | 在日曆日期元素上按一下後,將觸發事件 |
calendarDayClick | app | ||
change | 日曆 | (日曆、值) | 當日曆值變更時,將觸發事件 |
calendarChange | app | ||
monthAdd | 日曆 | (日曆、monthEl) | 當新增新的月份 HTML 版面時,將觸發事件。如果您需要後處理新增的 html 元素,這會很有用 |
calendarMonthAdd | app | ||
monthYearChangeStart | 日曆 | (日曆、年、月) | 在轉換到下個月份的開始時,將觸發事件 |
calendarMonthYearChangeStart | app | ||
monthYearChangeEnd | 日曆 | (日曆、年、月) | 在轉換到下個月份後,將觸發事件 |
calendarMonthYearChangeEnd | app | ||
init | 日曆 | (日曆) | 當日曆初始化時,將觸發事件 |
calendarInit | app | ||
open | 日曆 | (日曆) | 當日曆開始開啟動畫時,將觸發事件。事件處理函式會收到日曆實例作為參數 |
calendarOpen | app | ||
opened | 日曆 | (日曆) | 當日曆完成開啟動畫後,將觸發事件。事件處理函式會收到日曆實例作為參數 |
calendarOpened | app | ||
close | 日曆 | (日曆) | 當日曆開始其關閉動畫時,將觸發事件。作為參數,事件處理程序接收日曆實例 |
calendarClose | app | ||
closed | 日曆 | (日曆) | 當日曆完成其關閉動畫後,將觸發事件。作為參數,事件處理程序接收日曆實例 |
calendarClosed | app | ||
beforeDestroy | 日曆 | (日曆) | 在日曆實例被銷毀之前,將觸發事件。作為參數,事件處理程序接收日曆實例 |
calendarBeforeDestroy | app |
CSS 變數
以下是相關 CSS 變數 (CSS 自訂屬性) 的清單。
請注意,註解的變數並未在預設情況下指定,而它們的值是它們在此情況下的後備值。
:root {
--f7-calendar-height: 340px;
--f7-calendar-sheet-landscape-height: 220px;
--f7-calendar-popover-width: 320px;
--f7-calendar-popover-height: 320px;
--f7-calendar-modal-height: 420px;
--f7-calendar-modal-max-width: 380px;
/*
--f7-calendar-header-bg-color: var(--f7-bars-bg-color);
--f7-calendar-header-link-color: var(--f7-bars-link-color);
--f7-calendar-header-text-color: var(--f7-bars-text-color);
--f7-calendar-footer-bg-color: var(--f7-bars-bg-color);
--f7-calendar-footer-border-color: var(--f7-bars-border-color);
--f7-calendar-footer-link-color: var(--f7-bars-link-color);
--f7-calendar-footer-text-color: var(--f7-bars-text-color);
*/
--f7-calendar-week-header-bg-color: transparent;
--f7-calendar-footer-padding: 0 8px;
--f7-calendar-week-header-font-size: 11px;
/*
--f7-calendar-selected-bg-color: var(--f7-theme-color);
*/
--f7-calendar-disabled-text-color: #d4d4d4;
--f7-calendar-event-dot-size: 4px;
/*
--f7-calendar-event-bg-color: var(--f7-theme-color);
*/
/*
--f7-calendar-picker-selected-text-color: var(--f7-theme-color);
*/
--f7-calendar-time-selector-height: 28px;
--f7-calendar-picker-pressed-bg-color: rgba(0, 0, 0, 0.1);
--f7-calendar-picker-hover-bg-color: rgba(0, 0, 0, 0.03);
--f7-calendar-time-selector-bg-color: rgba(0, 0, 0, 0.05);
}
:root .dark,
:root.dark {
--f7-calendar-picker-pressed-bg-color: rgba(255, 255, 255, 0.08);
--f7-calendar-picker-hover-bg-color: rgba(255, 255, 255, 0.03);
--f7-calendar-time-selector-bg-color: rgba(255, 255, 255, 0.1);
}
.ios {
--f7-calendar-selected-text-color: #fff;
--f7-calendar-header-height: 44px;
--f7-calendar-header-font-size: 17px;
--f7-calendar-header-font-weight: 600;
--f7-calendar-header-padding: 0 8px;
--f7-calendar-footer-height: 44px;
--f7-calendar-footer-font-size: 17px;
--f7-calendar-week-header-height: 18px;
--f7-calendar-day-font-size: 15px;
--f7-calendar-day-size: 30px;
--f7-calendar-picker-font-size: 17px;
--f7-calendar-time-selector-font-size: 17px;
--f7-calendar-modal-border-radius: 4px;
--f7-calendar-modal-box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2),
0px 24px 38px 3px rgba(0, 0, 0, 0.14),
0px 9px 46px 8px rgba(0, 0, 0, 0.12);
--f7-calendar-prev-next-text-color: #c8c8c8;
--f7-calendar-sheet-border-color: #929499;
--f7-calendar-sheet-bg-color: #fff;
--f7-calendar-week-header-text-color: #5e5e5e;
--f7-calendar-modal-bg-color: #fff;
--f7-calendar-day-text-color: #000;
--f7-calendar-today-text-color: #000;
--f7-calendar-today-bg-color: #e3e3e3;
}
.ios .dark,
.ios.dark {
--f7-calendar-prev-next-text-color: #5e5e5e;
--f7-calendar-sheet-border-color: var(--f7-bars-border-color);
--f7-calendar-sheet-bg-color: #121212;
--f7-calendar-week-header-text-color: #aaa;
--f7-calendar-modal-bg-color: #121212;
--f7-calendar-day-text-color: #fff;
--f7-calendar-today-text-color: #fff;
--f7-calendar-today-bg-color: #333;
}
.md {
--f7-calendar-sheet-border-color: transparent;
--f7-calendar-header-height: 64px;
--f7-calendar-header-font-size: 24px;
--f7-calendar-header-font-weight: 400;
--f7-calendar-header-padding: 0 24px;
--f7-calendar-footer-height: 56px;
--f7-calendar-footer-font-size: 14px;
--f7-calendar-week-header-height: 24px;
--f7-calendar-day-font-size: 14px;
--f7-calendar-today-bg-color: none;
--f7-calendar-day-size: 32px;
--f7-calendar-picker-font-size: 14px;
--f7-calendar-time-selector-font-size: 14px;
--f7-calendar-modal-border-radius: 28px;
--f7-calendar-modal-box-shadow: none;
}
.md,
.md .dark,
.md [class*='color-'] {
--f7-calendar-sheet-bg-color: var(--f7-md-surface-1);
--f7-calendar-selected-text-color: var(--f7-md-on-primary);
--f7-calendar-week-header-text-color: var(--f7-md-on-surface-variant);
--f7-calendar-day-text-color: var(--f7-md-on-surface);
--f7-calendar-prev-next-text-color: rgba(var(--f7-md-on-surface-variant-rgb), 0.55);
--f7-calendar-today-text-color: var(--f7-theme-color);
--f7-calendar-modal-bg-color: var(--f7-md-surface-1);
}
範例
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner sliding">
<div class="title">Calendar</div>
</div>
</div>
<div class="page-content">
<div class="block">
<p>Calendar is a touch optimized component that provides an easy way to handle dates.</p>
<p>Calendar could be used as inline component or as overlay. Overlay Calendar will be automatically converted to
Popover on tablets (iPad).</p>
</div>
<div class="block-title">Default setup</div>
<div class="list list-strong-ios list-outline-ios">
<ul>
<li>
<div class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" placeholder="Your birth date" readonly="readonly" id="demo-calendar-default" />
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Custom date format</div>
<div class="list list-strong-ios list-outline-ios">
<ul>
<li>
<div class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" placeholder="Select date" readonly="readonly" id="demo-calendar-date-format" />
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Date + Time</div>
<div class="list list-strong-ios list-outline-ios">
<ul>
<li>
<div class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" placeholder="Select date and time" readonly="readonly"
id="demo-calendar-date-time" />
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Multiple Values</div>
<div class="list list-strong-ios list-outline-ios">
<ul>
<li>
<div class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" placeholder="Select multiple dates" readonly="readonly"
id="demo-calendar-multiple" />
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Range Picker</div>
<div class="list list-strong-ios list-outline-ios">
<ul>
<li>
<div class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" placeholder="Select date range" readonly="readonly" id="demo-calendar-range" />
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Open in Modal</div>
<div class="list list-strong-ios list-outline-ios">
<ul>
<li>
<div class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" placeholder="Select date" readonly="readonly" id="demo-calendar-modal" />
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Calendar Page</div>
<div class="list list-strong list-outline-ios">
<ul>
<li>
<a href="/calendar-page/" class="item-content item-link">
<div class="item-inner">
<div class="item-title">Open Calendar Page</div>
</div>
</a>
</li>
</ul>
</div>
<div class="block-title">Inline with custom toolbar</div>
<div class="block block-strong no-padding">
<div id="demo-calendar-inline-container"></div>
</div>
</div>
</div>
</template>
<script>
export default (props, { $f7, $, $on }) => {
let calendarDefault
let calendarDateFormat;
let calendarDateTime;
let calendarMultiple;
let calendarRange;
let calendarModal;
let calendarInline;
$on('pageInit', () => {
// Default
calendarDefault = $f7.calendar.create({
inputEl: '#demo-calendar-default',
});
// With custom date format
calendarDateFormat = $f7.calendar.create({
inputEl: '#demo-calendar-date-format',
dateFormat: { weekday: 'long', month: 'long', day: '2-digit', year: 'numeric' },
});
// Date + Time
calendarDateTime = $f7.calendar.create({
inputEl: '#demo-calendar-date-time',
timePicker: true,
dateFormat: { month: 'numeric', day: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric' },
});
// With multiple values
calendarMultiple = $f7.calendar.create({
inputEl: '#demo-calendar-multiple',
dateFormat: { month: 'short', day: 'numeric' },
multiple: true
});
// Range Picker
calendarRange = $f7.calendar.create({
inputEl: '#demo-calendar-range',
rangePicker: true
});
// Custom modal
calendarModal = $f7.calendar.create({
inputEl: '#demo-calendar-modal',
openIn: 'customModal',
header: true,
footer: true,
});
// Inline with custom toolbar
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
calendarInline = $f7.calendar.create({
containerEl: '#demo-calendar-inline-container',
value: [new Date()],
renderToolbar: function () {
return '<div class="toolbar calendar-custom-toolbar no-shadow">' +
'<div class="toolbar-inner">' +
'<div class="left">' +
'<a class="link icon-only"><i class="icon icon-back"></i></a>' +
'</div>' +
'<div class="center"></div>' +
'<div class="right">' +
'<a class="link icon-only"><i class="icon icon-forward"></i></a>' +
'</div>' +
'</div>' +
'</div>';
},
on: {
init: function (c) {
$('.calendar-custom-toolbar .center').text(monthNames[c.currentMonth] + ', ' + c.currentYear);
$('.calendar-custom-toolbar .left .link').on('click', function () {
calendarInline.prevMonth();
});
$('.calendar-custom-toolbar .right .link').on('click', function () {
calendarInline.nextMonth();
});
},
monthYearChangeStart: function (c) {
$('.calendar-custom-toolbar .center').text(monthNames[c.currentMonth] + ', ' + c.currentYear);
}
}
});
});
$on('pageBeforeRemove', () => {
calendarDefault.destroy();
calendarDateFormat.destroy();
calendarDateTime.destroy();
calendarMultiple.destroy();
calendarRange.destroy();
calendarModal.destroy();
calendarInline.destroy();
});
return $render;
};
</script>