vue日历组件

本文介绍了一个Vue.js日历组件的开发过程,包括自定义开始和结束时间、设定可选星期、限制月份切换范围以及显示默认选择日期等功能。此外,还涉及到UI设计和交互反馈,如点击不在范围内的日期会弹出提示。

日历组件在开发中经常被使用到,这次产品又对之前的日历做了需求升级,开发可真难,满足他的一切吧--------下面开始:
需求大概是这样子:

  1. 自定义开始时间和结束时间
  2. 自定义频次,即可控制星期几可选
  3. 月份切换只能在设置的开始月份和结束月份之间
  4. 可传入默认选择的日期,每个日期展示对应状态
  5. 不在开始结束范围内、不在设置频次内的点击弹出相应信息
    ui是这样的:
    在这里插入图片描述
    在这里插入图片描述
    首先是画布局,跟前段时间一样的操作方式,页面布局就是这样:画出头部,主体这些

    以下是日历主体部分的代码
 <div class="dateContent-body-day" v-for="item in 42" :key="item">
          <div
            :data-dates="
              year +
                '/' +
                month +
                '/' +
                (item - beginDay < 10
                  ? '0' + (item - beginDay)
                  : item - beginDay)
            "
            :data-day="
              new Date(year + '/' + month + '/' + (item - beginDay)).getDay()
            "
            @click="dateHandler"
            v-if="item - beginDay > 0 && item - beginDay <= fulldays"
            :class="{
              'can-day':
                (ignoreArray.indexOf(
                  new Date(
                    year + '/' + month + '/' + (item - beginDay)
                  ).getDay()
                ) < 0 &&
                new Date(
                  year + '/' + month + '/' + (item - beginDay)
                ).getTime() <= new Date().getTime()),
              'active-day':
                `${year}/${month}/${
                  item - beginDay < 10
                    ? '0' + (item - beginDay)
                    : item - beginDay
                }` === activeDate,
              'cannot-day':
                `${year}/${month}/${
                  item - beginDay < 10
                    ? '0' + (item - beginDay)
                    : item - beginDay
                }` > endMonth ||
                `${year}/${month}/${
                  item - beginDay < 10
                    ? '0' + (item - beginDay)
                    : item - beginDay
                }` < strMonth ||
                ignoreArray.indexOf(
                  new Date(
                    year + '/' + month + '/' + (item - beginDay)
                  ).getDay()
                ) > -1,
            }"
          >
            {{
              (item - beginDay)
                | filterDay(
                  year +
                    "/" +
                    month +
                    "/" +
                    (item - beginDay < 10
                      ? "0" + (item - beginDay)
                      : item - beginDay)
                )
            }}
            <i
              v-if="
                `${year}/${month}/${
                  item - beginDay < 10
                    ? '0' + (item - beginDay)
                    : item - beginDay
                }` >= strMonth &&
                  `${year}/${month}/${
                    item - beginDay < 10
                      ? '0' + (item - beginDay)
                      : item - beginDay
                  }` <= curDate &&
                  ignoreArray.indexOf(
                    new Date(
                      year + '/' + month + '/' + (item - beginDay)
                    ).getDay()
                  ) < 0
              "
              :class="
                clockedList
                  ? clockedList.findIndex(
                      (v) =>
                        v ==
                        year +
                          '/' +
                          month +
                          '/' +
                          (item - beginDay < 10
                            ? '0' + (item - beginDay)
                            : item - beginDay)
                    ) > -1
                    ? 'clocked'
                    : 'noClock'
                  : ''
              "
            ></i>
          </div>
          <div class="other-day" v-else-if="item - beginDay <= 0">
            {{ item - beginDay + prevfulldays }}
          </div>
          <div class="other-day" v-else>{{ item - beginDay - fulldays }}</div>
        </div>

接受父组件传入的一些值如下

 props: {
    curDate: String, //传入的默认选择时间
    strMonth: String, //设置的打卡开始时间
    endMonth: String, //设置的打卡结束时间
    ignoreArray: Array, //忽略的周次
    clockedList: Array, //打过卡的日期
    title: Array, //标题栏打卡人数占比
  },
总体而言也不难,上一个git地址,需要的自行下载吧
git@gitee.com:jhjhjh1993/calendar_component_.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值