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

效果:

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

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

微信小程序实现简单日历效果的更多相关文章

  1. 微信小程序之html5 canvas绘图并保存到系统相册

    这篇文章主要介绍了微信小程序之html5 canvas绘图并保存到系统相册,需要的朋友可以参考下

  2. 无法以编程方式从Android日历中读取重复发生的事件

    p=151&cpage=2#comment-52767来访问内部的android日历数据库.它适用于除重复活动之外的所有条目.光标根本不会返回任何重复发生的事件.有人可以帮助我吗?p=151例:编辑:谷歌似乎开始记录日历提供商.浏览到CalendarProvidier|GoogleDevelopers以获取更多信息.

  3. 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. 微信小程序多项选择器checkbox

    这篇文章主要为大家详细介绍了微信小程序多项选择器checkbox,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 微信小程序实现收缩式菜单

    这篇文章主要为大家详细介绍了微信小程序实现收缩式菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. 微信小程序自定义状态栏

    这篇文章主要为大家详细介绍了微信小程序自定义状态栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. 微信小程序实现简单的购物车功能

    这篇文章主要为大家详细介绍了微信小程序实现简单的购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. jQuery插件实现的日历功能示例【附源码下载】

    这篇文章主要介绍了jQuery插件实现的日历功能,结合完整实例形式分析了jQuery datepicker插件实现日历功能的相关操作技巧,需要的朋友可以参考下

  9. 微信小程序实现手机号码验证

    这篇文章主要为大家详细介绍了微信小程序实现手机号码验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. 微信小程序预览二进制流文件的方法

    这篇文章主要为大家详细介绍了微信小程序预览二进制流文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部