文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序实现简单日历效果

2024-04-02 19:55

关注

本文实例为大家分享了微信小程序实现日历效果的具体代码,供大家参考,具体内容如下

效果:

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);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯