在做微信公眾號的時候,使用的WeUI樣式,有一個需求是用戶選擇一個預約時間,需要年月日並精確到小時和分鍾。
但是WeUI的picker組件不支持直接顯示5列,根據WeUI.js作者的建議,是將日期和時間選擇作為兩個選擇器來實現。
所以我的實現思路是先選擇日期,然后自動跳出時間選擇,來模仿一個時間選擇器。日期屬於datepicker,時間屬於普通的picker。
效果圖:
點擊期望時間跳出datepicker:

在選擇時間並確定后跳出時間選擇,這是一個普通picker:
之后就可以對選擇的時間做處理了。
實現方法也很簡單:在第一picker選擇並消失后,調用第二個picker,這樣可以保證連續調用。
關鍵在於監聽第一個picker消失的事件,第一個消失后才能調用第二個。
代碼:
$('.ma_expect_date').click(function(event) {
var _this = this;
weui.datePicker({
start: new Date(),
end: 2030,
defaultValue: [new Date().getFullYear(), new Date().getMonth()+1, new Date().getDate()],
onConfirm: function(result){
// 二級調用:時間
$('.ma_expect_date_picker .weui-picker').on('animationend webkitAnimationEnd', function() {
show_expect_time_picker(_this, result);
});
},
id: 'ma_expect_date',
className: 'ma_expect_date_picker'
});
});
// -----------------------二級調用:時間
var hours = [],
minites = [],
symbol = [{ label: ':', value: 0 }];
function show_expect_time_picker(_this, date) {
var date = date[0].label + date[1].label + date[2].label;
if (!hours.length) {
for (var i = 0; i< 24; i++) {
var hours_item = {};
hours_item.label = ('' + i).length === 1 ? '0' + i : '' + i;
hours_item.value = i;
hours.push(hours_item);
}
}
if (!minites.length) {
for (var j= 0; j < 60; j++) {
var minites_item = {};
minites_item.label = ('' + j).length === 1 ? '0' + j : '' + j;
minites_item.value = j;
minites.push(minites_item);
}
}
weui.picker(hours, symbol, minites, {
defaultValue: [new Date().getHours()+1, 0, 0],
onConfirm: function(result) {
var time = result[0].label + ':' + result[2].label;
var expect_date = date + ' ' + time;
$(_this).find('.weui-cell__ft').text(expect_date);
},
id: 'ma_expect_time'
});
}
