# MySimpleCalendar
**Repository Path**: chinasoft6_ohos/my-simple-calendar
## Basic Information
- **Project Name**: MySimpleCalendar
- **Description**: JS日历组件
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-08-05
- **Last Updated**: 2023-03-04
## Categories & Tags
**Categories**: harmonyos-advanced
**Tags**: None
## README
# MySimpleCalendar
#### 效果演示

#### 使用说明
日历组件所在文件夹为js/default/common/component中mycalendar,它有引用同文件夹下的dateshow组件。
1、is-dark属性
is-dark属性你可以根据自己需要直接传入“0”或者“1”,0表示亮模式白色背景、1表示暗模式黑色背景,默认值为0。
2、select-date属性
引用组件时传递属性select-date="2021-05-05",日历中会默认选择这个日期。默认值为当前日期。
3、date-click事件 替换成 sel-date事件(OpenHarmony自定义事件含click无反应)
引用组件时传递事件@sel-date="selDate",selDate,可以从e.detail.date取出选择的日期,格式为yyyy-MM-dd。
```javascript
selDate(e){
prompt.showToast({
message:"当前选中的日期时:"+e.detail.date,
duration:2000
});
}
```
4、toCurrentDate方法
组件的toCurrentDate方法,在引用组件页面的js中,使用this.$child('mycalendar').toCurrentDate()可以使日历跳转到当前的月份 ,其中mycalendar为组件的id属性的值。
5、使用方式参照js/default/pages下的index页面:
```html
```
```javascript
import prompt from '@system.prompt';
export default {
data: {
isDark:0
},
onInit() {
},
toCurrentDate(){
this.$child('mycalendar').toCurrentDate();
},
/**
* 选中日期,返回给调用者
*/
selDate(e){
prompt.showToast({
message:"当前选中的日期时:"+e.detail.date,
duration:2000
});
},
/**
* 切换日历模式
*/
setCalendarModel(){
if(this.isDark == 0){
this.isDark = 1;
}else{
this.isDark = 0;
}
}
}
```
```html
.container {
flex-direction: column;
align-items: center;
}
.toCurrentDate_div{
position: fixed;
bottom: 100px;
right: 15px;
width: 50px;
height: 50px;
box-shadow :1px 1px 0px 2px cornflowerblue;
border-radius: 25px;
justify-content: center;
align-items: center;
}
.toCurrentDate{
width: 28px;
height: 28px;
border-width: 2px;
border-color: cornflowerblue;
text-align: center;
font-size: 20px;
color: cornflowerblue;
}
button{
margin-top: 40px;
width: 80%;
height: 40px;
}
```
#### 实现思路
1、单独展示出某年某月的日历——common/component/dateshow组件
```html
```
传入年、月、选择的日期、展示模式(亮/暗),即可把此月的日期展示起来。其日期数据处理逻辑,这个每个人都有自己的逻辑思路并非鸿蒙组件的实现,这里不多做介绍。
2、将某年某月的日历组合起来形成日历——common/component/mycalendar组件
如何将每个月的日历组合起来形成一个日历呢?这里我们使用了swiper组件,他可以实现左右滑动。我们内置了三个页签,实现0-1、1-2、2-0无限循环的模式来实现日历的左右滑动切换月份,
当然你要判断左滑、右滑来减、加月份展示日期数据。
```html
```
3、封装成组件供他人使用
上面仅仅是将日历展示出来的思路,一个日历展示出来了需要给他人使用,就得考虑哪些东西是使用者可以配置的、哪些事件是使用者可以捕获然后去处理自己的业务逻辑、哪些方法是使用者可能会主动去使用的,从这几个方面考虑。
日历提供了两种模式亮/暗(常规手机系统支持模式),所以提供is-dark属性给用户配置;用户可能需要默认选中某个日期,所以提供了select-date属性;我们选中某个日期时,用户可能会想获取选中的日期用于项目,所以提供了sel-date事件;
用户滑动,都显示到n年n月了,想回到当前月份,所以我们提供了toCurrentDate方法。
最后,用户可能想知道某年某月的日历,但其距离当前月份比较远,点击、滑动需要操作好久,所以我们提供点击头部年月弹出年月选择弹框,选择后我们可直接跳转到对应月份。
#### 仓库地址
[https://gitee.com/chinasoft6_ohos/my-simple-calendar](https://gitee.com/chinasoft6_ohos/my-simple-calendar)
作者:陈巧银