亲宝软件园·资讯

展开

微信小程序日历效果

别凶小晗. 人气:0

效果:

wxml:

<!-- 日历 -->
        <view class="myReport-calendar">
            <view class="img">
                <image mode="aspectFit" src="/imgs/calendar.png"></image>
            </view>
            <view class="calendar">
                <view class="selectDate">
                    <view class="date-wrap">
                        {{year}}年{{month}}月
                    </view>
                </view>

                <view class="week">
                    <block wx:for="{{weekArr}}" wx:for-index="index" wx:for-item="item" wx:key="key">
                        <view>{{item}}</view>
                    </block>
                </view>

                <view class="date-box">

                    <block wx:for='{{dateArr}}' wx:key='key'>
                        <view class='{{theDay == item.isToday ? "nowDay" : ""}}' data-key='{{item.isToday}}'>
                            <view class='date-head' data-year='{{year}}' data-month='{{month}}'
                                data-datenum='{{item.dateNum}}'>
                                <view>{{item.dateNum}}</view>
                            </view>
                        </view>
                    </block>
           </view>
     </view>
</view>

js:

// pages/report/report.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
               year: 0,
        month: 0,
        weekArr: ['日', '一', '二', '三', '四', '五', '六'],
        dateArr: [],
        isToday: "",
        isTodayWeek: false,
        todayIndex: 0,
        theDay: "",
        index: '',
        signNum: '', //签到数
    },
   dateInit: function (setYear, setMonth) {
        //全部时间的月份都是按0~11基准,显示月份才+1
        let dateArr1 = []; //需要遍历的日历数组数据
        let arrLen = 0; //dateArr的数组长度
        let now = setYear ? new Date(setYear, setMonth) : new Date();
        let year = setYear || now.getFullYear();
        let nextYear = 0;
        let month = setMonth || now.getMonth(); //没有+1方便后面计算当月总天数
        let nextMonth = (month + 1) > 11 ? 1 : (month + 1);
        let startWeek = new Date(year + '/' + (month + 1) + '/' + 1).getDay(); //目标月1号对应的星期
        let dayNums = new Date(year, nextMonth, 0).getDate(); //获取目标月有多少天
        let obj = {};
        let num = 0;
        if (month + 1 > 11) {
            nextYear = year + 1;
            dayNums = new Date(nextYear, nextMonth, 0).getDate();
        }
        arrLen = startWeek + dayNums;
        for (let i = 0; i < arrLen; i++) {
            if (i >= startWeek) {
                num = i - startWeek + 1;
                obj = {
                    isToday: '' + year + (month + 1) + num,
                    dateNum: num,
                    weight: 5
                }
            } else {
                obj = {};
            }
            dateArr1[i] = obj;
        }
        this.setData({
            dateArr: dateArr1
        })
        let nowDate = new Date();
        let nowYear = nowDate.getFullYear();
        let nowMonth = nowDate.getMonth() + 1;
        let nowWeek = nowDate.getDay();
        let getYear = setYear || nowYear;
        let getMonth = setMonth >= 0 ? (setMonth + 1) : nowMonth;
        if (nowYear == getYear && nowMonth == getMonth) {
            this.setData({
                isTodayWeek: true,
                todayIndex: nowWeek
            })
        } else {
            this.setData({
                isTodayWeek: false,
                todayIndex: -1
            })
        }
    },
    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {
        let now = new Date();
        let year = now.getFullYear();
        let month = now.getMonth() + 1;
        this.dateInit();
        this.setData({
            year: year,
            month: month,
            isToday: '' + year + month + now.getDate(),
            theDay: '' + year + month + now.getDate()
        })
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})

wxss:

/* 日历 */
.myReport-calendar {
    width: 100%;
    height: 700rpx;
    margin-top: 27rpx;
    margin-bottom: 40rpx;
    position: relative;
}

.calendar {
    position: absolute;
    top: 88rpx;
    left: 0;
    right: 0;
    bottom: 0;
    margin: 0 auto;
}

.today .day {
    width: 100%;
    height: 100%;
    margin: 0 auto;
    text-align: center;
}

.today text {
    display: block;
    width: 60rpx;
    text-align: center;
    line-height: 60rpx;
    color: #fff;
    background: #00c8be;
    border-radius: 100rpx;
}

.selectDate {
    padding-bottom: 20rpx;
    text-align: center;
}

.date-wrap {
    font-size: 32rpx;
    font-weight: 600;
    color: #232323;
}

.week {
    display: flex;
    align-items: center;
    justify-content: space-around;
    padding: 30rpx;
    color: #000000;
    font-weight: 400;
    font-size: 28rpx;
}

.date-box {
    font-size: 0;
    padding: 0 30rpx 30rpx 30rpx; 
    margin: 0 auto;
}

.date-box>view {
    position: relative;
    display: inline-block;
    width: 14.285%;
    color: #333;
    text-align: center;
    vertical-align: middle;
    padding-bottom: 30rpx;
}

.date-head {
    height: 60rpx;
    line-height: 60rpx;
    font-size: 28rpx;
}

.nowDay .date-head {
    width: 60rpx;
    border-radius: 50%;
    text-align: center;
    color: #fff;
    background-color: #00c8be;
    margin: 0 auto;
}

.nowDay .date-head:hover {
    background: linear-gradient(to bottom right, #009899, #19d6cb);
}

加载全部内容

相关教程
猜你喜欢
用户评论