返回
别再把体积交给better-scroll!手写组件实现纯原生年月日期选择器!**
前端
2023-12-01 03:06:33
正文:
在移动端开发中,日期选择器是一种常见组件,它允许用户轻松选择日期。然而,许多现有的日期选择器都使用了better-scroll作为移动端滚动插件,这无疑会增加项目的体积。
更好的做法是,自己实现一个不使用插件的日期选择器。这样,我们就可以减少项目体积,提升性能。
实现原理:
我们要实现一个只包含年月的日期选择器。布局代码如下:
<div class="date-picker">
<div class="year-picker">
<div class="year-list">
<div class="year-item">2023</div>
<div class="year-item">2024</div>
<div class="year-item">2025</div>
</div>
</div>
<div class="month-picker">
<div class="month-list">
<div class="month-item">1月</div>
<div class="month-item">2月</div>
<div class="month-item">3月</div>
</div>
</div>
</div>
CSS样式代码如下:
.date-picker {
display: flex;
align-items: center;
}
.year-picker, .month-picker {
flex: 1;
overflow: auto;
}
.year-list, .month-list {
display: flex;
flex-direction: column;
}
.year-item, .month-item {
padding: 10px;
}
.year-item:hover, .month-item:hover {
background-color: #efefef;
}
.year-item.active, .month-item.active {
background-color: #007bff;
color: #fff;
}
JavaScript代码如下:
const yearPicker = document.querySelector('.year-picker');
const monthPicker = document.querySelector('.month-picker');
const yearList = document.querySelector('.year-list');
const monthList = document.querySelector('.month-list');
const yearItems = document.querySelectorAll('.year-item');
const monthItems = document.querySelectorAll('.month-item');
let selectedYear = null;
let selectedMonth = null;
yearItems.forEach((yearItem) => {
yearItem.addEventListener('click', () => {
selectedYear = parseInt(yearItem.textContent);
yearItems.forEach((item) => {
item.classList.remove('active');
});
yearItem.classList.add('active');
});
});
monthItems.forEach((monthItem) => {
monthItem.addEventListener('click', () => {
selectedMonth = parseInt(monthItem.textContent);
monthItems.forEach((item) => {
item.classList.remove('active');
});
monthItem.classList.add('active');
});
});
const onDateChange = (year, month) => {
// 处理日期变化的逻辑
};
setInterval(() => {
if (selectedYear && selectedMonth) {
onDateChange(selectedYear, selectedMonth);
}
}, 100);
这个日期选择器很简单,它只包含年和月两个选项。用户可以通过点击年和月的选项来选择日期。
优点:
- 不使用任何第三方库,因此可以减少项目体积,提升性能。
- 代码简单易懂,维护方便。
- 可以根据需要进行扩展,添加更多功能。
缺点:
- 功能有限,只支持选择年和月。
- 没有考虑用户体验,交互性较差。
结语:
这个日期选择器是一个很好的例子,它展示了如何通过原生JavaScript来实现一个简单的组件。我们可以根据需要对这个日期选择器进行扩展,添加更多功能,使其更加强大。