微信小程序 日历区间选择组件

有项目需求需要一个日历区间的选择器,发现vant 或者其他的日历区间选择组件不是很满足需求,于是自己改造一个;

效果如下

上wxml代码

<view wx:if="{{ isShow }}" class="component {{ up }}">
    <view class="header">
        <image src="/static/images/home/Groupcalendar-close.png" bindtap="calendarClose" class="header-close" mode="" />
        <view bindtap="handlePrevMonthClick">{{ huiche }}</view>
        <view>{{year}}年{{month}}月</view>
        <view bindtap="handleNextMonthClick">></view>
    </view>
    <view>
        <view class="week">日</view>
        <view class="week">一</view>
        <view class="week">二</view>
        <view class="week">三</view>
        <view class="week">四</view>
        <view class="week">五</view>
        <view class="week">六</view>
    </view>
    <view class="daybox">
        <block wx:for="{{dayList}}" wx:key="index">
            <view wx:if="{{item.day}}" class="day {{dataList.length === 2 && item.date < dataList[1] && item.date > dataList[0]  ? 'to-checked': ''}} {{item.date == dataList[0]? 'day-checked': ''}} {{item.date == dataList[1]? 'day-two-checked': ''}}  {{item.bg ? 'day-bg' : ''}}" data-day="{{item.day}}"  data-month="{{item.month}}" data-year="{{item.year}}" data-date="{{item.date}}" bindtap="handleDayClick">
                <view>{{item.day}}</view>
                <view class="point" wx:if="{{item.point}}"></view>
            </view>
            <view wx:elif="{{index < 10}}" class="day"></view>
        </block>
    </view>
    <view>
        <button class="bottom calendar-bottom" bindtap="toGoHome">选好了</button>
    </view>
</view>

 wxss

.component {
    background: #fff;
    margin: 45rpx;
    box-sizing: border-box;
    box-shadow: 0rpx 0rpx 20rpx 3rpx #ccc;
    border-radius: 20rpx;
    padding-bottom: 20rpx;
}

.left-set {
    -webkit-animation: scale-up-tl 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both;
    animation: scale-up-tl 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both;
}

.right-set {
    -webkit-animation: scale-up-tr 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both;
    animation: scale-up-tr 1s cubic-bezier(0.390, 0.575, 0.565, 1.000) both;
}

@keyframes scale-up-tr {
    0% {
        -webkit-transform: scale(0.5);
        transform: scale(0.5);
        -webkit-transform-origin: 100% 0%;
        transform-origin: 100% 0%;
    }

    100% {
        -webkit-transform: scale(1);
        transform: scale(1);
        -webkit-transform-origin: 100% 0%;
        transform-origin: 100% 0%;
    }
}

@-webkit-keyframes scale-up-tl {
    0% {
        -webkit-transform: scale(0.5);
        transform: scale(0.5);
        -webkit-transform-origin: 0% 0%;
        transform-origin: 0% 0%;
    }

    100% {
        -webkit-transform: scale(1);
        transform: scale(1);
        -webkit-transform-origin: 0% 0%;
        transform-origin: 0% 0%;
    }
}

@keyframes scale-up-tl {
    0% {
        -webkit-transform: scale(0.5);
        transform: scale(0.5);
        -webkit-transform-origin: 0% 0%;
        transform-origin: 0% 0%;
    }

    100% {
        -webkit-transform: scale(1);
        transform: scale(1);
        -webkit-transform-origin: 0% 0%;
        transform-origin: 0% 0%;
    }
}

.header {
    display: flex;
    justify-content: left;
    padding: 20rpx;
    position: relative;
}

.header view {
    height: 80rpx;
    line-height: 80rpx;
    font-size: 32rpx;
    color: rgba(0, 0, 0, 0.85);
    min-width: 80rpx;
    text-align: center;
}

.header-close {
    width: 41rpx;
    height: 41rpx;
    position: absolute;
    right: 23rpx;
    top: 18rpx;
}

.header view:nth-child(2n-1) {
    font-size: 35rpx;
}

.week {
    display: inline-block;
    width: 95rpx;
    line-height: 2;
    color: rgba(0, 0, 0, 0.45);
    font-size: 28rpx;
    text-align: center;
    background-color: var(--btColor);
    color: var(--themeColor);
}

.daybox {
    display: flex;
    flex-wrap: wrap;
}

.day {
    width: 95rpx;
    height: 95rpx;
    border-radius: 50%;
    box-sizing: border-box;
    text-align: center;
    line-height: 2.5;
    color: #666;
}

/* .day:nth-child(7n),
.day:nth-child(7n) {
    color: #ff9b80;
}
.day:nth-child() {
    color: #ff9b80;
} */



.to-checked {
    background-color: var(--btShallowColor);
    border-radius: 0%;
}

.day-checked {
    border: 4rpx solid var(--btColor) !important;
    border-radius: 50% 0 0 50%;
    background-color: var(--btColor);
    color: #fff;
}

.day-two-checked {
    border: 4rpx solid var(--btColor) !important;
    border-radius: 0% 50% 50% 0%;
    background-color: var(--btColor);
    color: #fff;
}


.day-bg {
    background: #ffe9e4 !important;
}

.point {
    width: 10rpx;
    height: 10rpx;
    border-radius: 50%;
    background: #ff876d;
    margin: 0 auto;
    margin-top: 5rpx;
}

.calendar-bottom {
    width: 336rpx;
    height: 78rpx;
    text-align: center;
    line-height: 78rpx;
    font-size: 32rpx;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信小程序中的select下拉选择组件,是一种常见的界面组件,用于在使用时经常需要从多个选项中选择一个的场景中。 在使用select下拉选择组件时,我们可以通过在wxml文件中使用<picker>标签来定义一个select组件。在<picker>标签中,我们可以设置多个选项,每个选项可以使用<picker-view-column>标签包裹,并在其中使用<picker-view-column-item>标签来定义具体的选项。 例如,如下代码段展示了一个简单的select组件: ``` <picker mode="selector" range="{{array}}" bindchange="bindPickerChange"> <view class="picker"> 当前选择:{{array[index]}} </view> </picker> ``` 在上述代码中,mode属性设置为"selector",表示这是一个select组件。range属性设置为一个数组array,表示下拉菜单中的选项列表。bindchange属性设置为一个处理函数bindPickerChange,表示当选择项改变时执行的函数。在select组件内部,我们还可以使用<view>标签来显示当前选择的选项。 在处理函数bindPickerChange中,可以通过event.detail.value获取当前选择的选项的索引值。我们可以根据这个索引值进行相应的操作,比如更新界面显示、发起请求等。 总结而言,微信小程序的select下拉选择组件是一种实用的界面组件,在我们需要从多个选项中选择一个时非常有用。我们可以通过设置<picker>标签的属性来定义选项,通过处理函数来获取当前选择的选项,并进行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值