Чтобы реализовать календарь, нам потребуются следующие значения:
Количество дней в месяце
День недели первого дня месяца
По общим знаниям мы знаем, что месяц может содержать от 28 до 31 дня. В календаре каждая строка состоит из 7 клеток, поэтому всего будет 5 строк, но если первый день месяца выпадает на субботу, то потребуется 6 строк.
В小程序 нет понятия DOM-операций, поэтому невозможно динамически добавлять пустые клетки перед первым днем месяца. Можно использовать цикл для добавления пустых клеток перед началом месяца, подробнее см. файл
wxml
.
Шаблон календаря поддерживает горизонтальное свайпование;
Предоставляет метод перехода к сегодняшнему дню
jumpToToday
;
Устанавливает метки задач для конкретной даты
setTodoLabels
;
Удаляет метки задач для конкретной даты
deleteTodoLabels
;
Очищает все метки задач для всех дат
clearTodoLabels
;
Шаблон доступен через template
введение шаблона1. Введение wxml
и wxss
<!-- пример. wxml -->
<import src="./template/calendar/index.wxml"/>
<view class="calendar-wrap">
<template is="calendar" data="{{calendar}}"/>
</view>
/* пример. wxss */
@import './template/calendar/index.wxss';
import initCalendar, { getSelectedDay, jumpToToday, setTodoLabels, deleteTodoLabels, clearTodoLabels } from './template/calendar/index';
const conf = {
onShow: function () {
initCalendar({
// multi: true, // Включить множественный выбор
// disablePastDay: true, // Отключить выбор прошедших дат
/**
* Обработчик события после нажатия на день
* @param {object} currentSelect - Выбранный день
* @param {array} allSelectedDays - Все выбранные дни (только если multi=true)
*/
afterTapDay: (currentSelect, allSelectedDays) => {
console.log('================================');
console.log('Выбранный день:', currentSelect);
console.log('Есть ли отметка на выбранном дне?:', currentSelect.hasTodo || false);
if (allSelectedDays) console.log('Все выбранные дни:', allSelectedDays);
console.log('Метод getSelectedDay:', getSelectedDay());
},
/**
* Обработчик события при клике на день (полностью заменяет событие клика)
* @param {object} currentSelect - Выбранный день
* @param {object} event - Объект события клика
*/
// onTapDay(currentSelect, event) {
// console.log(currentSelect);
// console.log(event);
// },
/**
* Обработчик события после первой отрисовки календаря
*/
afterCalendarRender() {
setTodoLabels({
pos: 'bottom',
dotColor: '#FF0000',
days: [
{
year: 2018,
month: 5,
day: 12,
},
{
year: 2018,
month: 5,
day: 15,
}
],
});
},
});
},
};
``````md
// clearTodoLabels();
},
/**
* Переход к сегодняшнему дню
*/
jump() {
jumpToToday();
},
};
Page(conf);
Календарь поддерживает жесты левой и правой прокрутки; ```> Предоставляет метод перехода к сегодняшнему дню
jumpToToday
;
В этом
шаблоне
есть поле вводаinput
, которое не влияет на использование шаблона и может быть скрыто при необходимости;
Компонент выбора даты
input
позволяет ввести конкретную дату;
wxml
и wxss
// example.wxml
<import src="../../template/datepicker/index.wxml"/>
<view class="datepicker-box">
<template is="datepicker" data="{{...datepicker}}" />
</view>
/* example.wxss */
@import '../../template/datepicker/index.wxss';
```2. Инициализация компонента выбора даты
```js
import initDatepicker, { getSelectedDay, jumpToToday } from '../../template/datepicker/index';
const conf = {
onShow: function() {
initDatepicker({
// disablePastDay: true, // Отключает возможность выбора прошедших дат
// showInput: false, // По умолчанию true
// placeholder: 'Выберите дату', // Подсказка поля ввода
// type: 'normal', // [normal - обычный режим выбора одной даты (по умолчанию), timearea - режим выбора временного интервала (в разработке), multiSelect - режим множественного выбора (в разработке)]
/**
* Выполняется после выбора даты
* @param { object } currentSelect Выбранная дата
*/
afterTapDay: (currentSelect) => {
console.log('Выбранная дата', currentSelect);
console.log('Метод получения выбранной даты', getSelectedDay());
},
/**
* Обрабатывает событие нажатия на дату
* @param { object } currentSelect Выбранная дата
* @param {object} event Событие нажатия на дату
*/
onTapDay(currentSelect, event) {
console.log(currentSelect);
console.log(event);
},
});
},
/**
* Переход к сегодняшнему дню
*/
jump() {
jumpToToday();
}
};
Page(conf);
#### Эффектный вид календаря
Приветствуем ваши отзывы...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )