一、核心使用流程与代码对应
代码实现对应:
<!-- Step1: 引入资源 -->
<link rel="stylesheet" href="layui/css/layui.css">
<script src="layui/layui.js"></script>
<!-- Step2: 创建输入元素 -->
<input type="text" id="date1">
<script>
// Step3: 初始化模块
layui.use('laydate', function(){
const laydate = layui.laydate;
// Step4: 配置参数
laydate.render({
elem: '#date1', // 绑定元素
type: 'date', // 类型
format: 'yyyy-MM-dd', // 格式
// Step5: 回调处理
done: function(value){
console.log('选中值:', value);
}
});
});
</script>
二、联动控制流程与代码解析
代码实现要点:
// 开始时间实例
const start = laydate.render({
elem: '#startTime',
done: function(value, date){
// 动态更新结束时间的最小值(精确到分钟)
end.config.min = {
year: date.year,
month: date.month - 1, // 月份需-1
date: date.date,
hours: date.hours,
minutes: date.minutes
};
// 强制刷新结束时间选择器
end.render(true);
}
});
// 结束时间实例
const end = laydate.render({
elem: '#endTime',
min: laydate.now(), // 初始最小值
ready: function(){
// 初始化时同步状态
this.config.min = start.config.value ? start.config.min : this.config.min;
}
});
三、高级配置流程代码实现
对应代码示例:
laydate.render({
elem: '#advDemo',
theme: '#FFB800', // 主题色
position: 'static', // 静态定位
range: '至', // 范围选择
shortcuts: [ // 快捷选项
{
name: '今天', day: 0},
{
name: '三天后', day: 3},
{
name: '一周后', day: 7}
],
min: '09:00:00', // 最早时间
max: '18:30:00', // 最晚时间
showBottom: false, // 隐藏底部栏
mark: {
// 标注重要日期
'0-10-1': '国庆节',
'2024-2-14': '情人节'
}
});
四、异常处理场景与解决方案
flowchart TD
Error[日期选择器不显示] --> Check1[检查控制台报错]
Check1 -->|元素ID冲突| Solve1[确认elem选择器唯一]
Check1 -->|重复初始化| Solve2[先销毁实例]
Solve2 --> Code1[laydate.destroy('#elem')]
Check1 -->|时间格式错误| Solve3[验证format参数]
Solve3 --> Code2[format: 'yyyy-MM-dd']
典型问题代码修正:
// 错误:重复初始化
$('#dynamicElem').click(function(){
laydate.render({
elem: '#demo' }); // 每次点击都会创建新实例
});
// 正确:单例模式
let demoInstance;
function initDatePicker(){
if(demoInstance) laydate.destroy('#demo');
demoInstance = laydate.render({
elem: '#demo' });
}
五、移动端适配最佳实践
<!-- Viewport设置 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- 代码优化 -->
laydate.render({
elem: '#mobileDate',
trigger: 'tap', // 移动端触发方式
show: false, // 不直接显示控件
closeStop: '#mobileDate', // 点击外部不关闭
calendar: true // 启用日历模式
});