微信小程序使用日历需要禁用某些日期需求的实现

需求描述:

日历组件,某些日期被人选了,就不能再选,用一个颜色标记。用户可以选择部分能选的。

在这里插入图片描述
类似这样的需求图片。

办法1是,vant-ui 微信小程序插件 本身的日期组件是可以实现的。

具体方法:


    <van-calendar
    title="日历"
    :show="true"
    :formatter="formatter1"
    color="#07c160"
    type="range"
    :show-confirm="false"
/>

我们可以通过`formatter`来自定义渲染内容。

      formatter1(day){
   
         // 周日全天不可选
        let week = day.date.getDay()
        if(week == 0){
   
            day.type = 'disabled_yes' // 很牛笔 很关键
        }
          const month = day.date.getMonth() + 1;
      const date = day.date.getDate();

      if (month === 5) {
   
        if (date === 1) {
   
          day.topInfo = '劳动节';
        } else if (date === 4) {
   
          day.topInfo = '五四青年节';
        } else if (date === 11) {
   
          day.text = '今天';
        }
      }

      if (day.type === 'start') {
   
        day.bottomInfo = '入住';
      } else if (day.type === 'end') {
   
        day.bottomInfo = '离店';
      }

        return day
     },

重点: 通过formate函数,我们可以指定日期day.type的类型为disabled 那么,禁用的样式就是官方自己的默认的日期禁用样式。

但是我们需要自定义禁用样式, 那么 day.type = 'day–disabled_yes’设置为一个自定义的名称, vant的组件会自动生成一个 van-calendar__day--disabled_yes的类名,然后 我们通过这个类名 自己写样式就行了。

<style>
.van-calendar__day--disabled_yes {
   
  color:  red;
}
</style>

最后的效果就是这样子

在这里插入图片描述
但是这种方法有个坑,formate函数,只会在当月执行,其他月份,需要点击月份才能触发,并且担心性能问题。 没有继续研究下去。

方法二:使用wx_calendar这个改写
源码地址:https://github.com/treadpit/wx_calendar
源码文档:https://treadpit.github.io/wx_calendar/v1/guide.html#%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5

注意: 他有v1 和v2两个版本,方式不一样。 我使用的是v1版本

将src/component/calendar这个目录下的文件全部拷贝到自己的组件目录。

我的是wepy2框架 都可以直接拷贝,原生小程序当然也可以直接用。

文档可以传入我们需要禁用的日期

使用示例demo

<template>
  <div class="container-wrap">
   <calendar calendarConfig="{
   {calendarConfig}}" />
  </div>
</template>
import wepy from '@wepy/core'

import store from '@/store'

import {
    disableDay } from '../components/calendar/main.js'
wepy.page({
   
  store,
  data: {
   
    calendarConfig: {
   
      multi: true,
      disableMode: {
     // 禁用某一天之前/之后的所有日期
        type: 'before'  // [‘before’, 'after']
        // date: '2020-03-24', // 无该属性或该属性值为假,则默认为当天
      },
      onlyShowCurrentMonth: false
      // defaultDay: '2018-3-6'
    }
  },
  computed: {
   

  },
  watch: {
   
  },
  methods: {
   
    initData() {
   
      // jump(2018, 6, 6)
      disableDay([
        {
   
          year: 2021,
          month: '06',
          day: 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值