生活中有各种可以打卡的app,例如背单词打卡什么的,本人觉得很有意思,于是本人在大二时做了一款诚信状打卡的微信小程序,这里讲述一下编写的过程。

先说一下开发环境:用的是微信web开发工具开发的,后台采用了Bmob后台,比较方便。

先展示一下成果:

话不多说,直接上代码,里面也有挺多的注释,以防自己忘记,当然各位如果直接复制过去肯定不能有当前的效果,注意后台数据的交互,不过做一个界面还是没有问题的。

Calendar.wxml 页面文件

页面上显示出来的东西,布局上主要是一个年月栏、上一个月和下一个月的按钮;然后是星期栏,就是日一二三四五六,然后就是每个月的日期,注意每个月的前面可能有空的地方。这里面用wx:if标签来区分当前日期有无打卡的情况。

{{cur_year || "--"}} 年 {{cur_month || "--"}} 月

{{item}}

{{days[j+k].date}}

{{days[j+k].date}}

截至目前,你已坚持打卡

{{count}}

请再接再厉,继续努力

Calendar.wxss 样式文件

这个就是让页面显示得更好看一点了,里面有些属性更改之后可能会导致整个页面的格式变得很乱,说明自己的功夫还是不到家。

/* pages/Calendar/Calendar.wxss */

/* 打卡日历 */

.all{

margin-top: 20rpx;

}

.all .bar{

display: flex;

flex-direction: row;

justify-content: space-between;

margin: 30rpx 20rpx;

padding: 10rpx;

}

.all .bar image{

width: 50rpx;

height: 50rpx;

}

.all .week{

display: flex;

flex-direction: row;

justify-content: space-between;

padding: 20rpx;

padding-left: 40rpx;

padding-right: 40rpx;

margin: 20rpx;

border-radius: 10px;

background-color: #acd;

}

.all .days{

margin: 20rpx;

padding: 10rpx;

border-radius: 10px;

background-color: #acd;

}

.all .columns{

display: flex;

flex-direction: column;

justify-content: space-between;

}

.all .columns .rows{

display: flex;

flex-direction: row;

justify-content: space-between;

}

.all .columns .rows .cell{

width: 84rpx;

height: 88rpx;

margin: 3rpx;

text-align: center;

border-radius: 50%;

display: flex;

flex-direction: column;

justify-content: center;

}

.count .daynumber{

display: flex;

flex-direction: row;

justify-content: center;

}

.count .daynumber .day{

margin-top: 50rpx;

}

.count{

margin: 20rpx;

padding: 30rpx;

display: flex;

text-align: center;

border-radius: 10px;

flex-direction: column;

justify-content: center;

background-color: #acd;

align-items: center;

}

.count .number{

color: red;

font-size: 60rpx;

background-color: #fff;

width: 100rpx;

height: 100rpx;

border-radius: 50%;

display: flex;

flex-direction: column;

justify-content: center;

margin: 20rpx;

}

.count text{

margin: 10rpx;

}

Calendar.js JavaScript文件

js文件里面涉及到Bmob的操作,这里就不多说Bmob的操作了,感兴趣的同学可以去参考它的官方文档。

然后里面主要是对上一个月、下一个月的点击函数进行处理,以及对某年某月的每个日期进行初始化(尤其是每个月前的可能有的几个空格进行了处理),然后就是判断某个日期在后台数据中是否有打卡。

// pages/Calendar/Calendar.js

//打卡日历页面

var util = require('../../utils/util.js');

var Bmob = require('../../utils/bmob.js');

Page({

/**

* 页面的初始数据

*/

data: {

objectId:'',

days:[],

signUp:[],

cur_year:0,

cur_month:0,

count:0

},

/**

* 生命周期函数--监听页面加载

*/

onLoad: function (options) {

this.setData({objectId : options.objectId});

//获取当前年月

const date = new Date();

const cur_year = date.getFullYear();

const cur_month = date.getMonth() + 1;

const weeks_ch = ['日', '一', '二', '三', '四', '五', '六'];

this.calculateEmptyGrids(cur_year, cur_month);

this.calculateDays(cur_year, cur_month);

//获取当前用户当前任务的签到状态

this.onGetSignUp();

this.setData({

cur_year,

cur_month,

weeks_ch

})

},

/**

* 生命周期函数--监听页面初次渲染完成

*/

onReady: function () {

},

/**

* 生命周期函数--监听页面显示

*/

onShow: function () {

},

/**

* 生命周期函数--监听页面隐藏

*/

onHide: function () {

},

/**

* 生命周期函数--监听页面卸载

*/

onUnload: function () {

},

/**

* 页面相关事件处理函数--监听用户下拉动作

*/

onPullDownRefresh: function () {

},

/**

* 页面上拉触底事件的处理函数

*/

onReachBottom: function () {

},

/**

* 用户点击右上角分享

*/

onShareAppMessage: function () {

},

// 获取当月共多少天

getThisMonthDays:function(year, month){

return new Date(year, month, 0).getDate()

},

// 获取当月第一天星期几

getFirstDayOfWeek:function(year, month) {

return new Date(Date.UTC(year, month - 1, 1)).getDay();

},

// 计算当月1号前空了几个格子,把它填充在days数组的前面

calculateEmptyGrids:function(year, month) {

var that = this;

//计算每个月时要清零

that.setData({days:[]});

const firstDayOfWeek = this.getFirstDayOfWeek(year, month);

if (firstDayOfWeek > 0) {

for (let i = 0; i < firstDayOfWeek; i++) {

var obj = {

date:null,

isSign:false

}

that.data.days.push(obj);

}

this.setData({

days:that.data.days

});

//清空

} else {

this.setData({

days: []

});

}

},

// 绘制当月天数占的格子,并把它放到days数组中

calculateDays:function(year, month) {

var that = this;

const thisMonthDays = this.getThisMonthDays(year, month);

for (let i = 1; i <= thisMonthDays; i++) {

var obj = {

date: i,

isSign: false

}

that.data.days.push(obj);

}

this.setData({

days:that.data.days

});

},

//匹配判断当月与当月哪些日子签到打卡

onJudgeSign:function(){

var that = this;

var signs = that.data.signUp;

var daysArr = that.data.days;

for (var i=0; i < signs.length;i++){

var current = new Date(signs[i].date.replace(/-/g, "/"));

var year = current.getFullYear();

var month = current.getMonth()+1;

var day = current.getDate();

day = parseInt(day);

for (var j = 0; j < daysArr.length;j++){

//年月日相同并且已打卡

if (year == that.data.cur_year && month == that.data.cur_month && daysArr[j].date == day && signs[i].isSign == "今日已打卡"){

daysArr[j].isSign = true;

}

}

}

that.setData({days:daysArr});

},

// 切换控制年月,上一个月,下一个月

handleCalendar:function(e) {

const handle = e.currentTarget.dataset.handle;

const cur_year = this.data.cur_year;

const cur_month = this.data.cur_month;

if (handle === 'prev') {

let newMonth = cur_month - 1;

let newYear = cur_year;

if (newMonth < 1) {

newYear = cur_year - 1;

newMonth = 12;

}

this.calculateEmptyGrids(newYear, newMonth);

this.calculateDays(newYear, newMonth);

this.onGetSignUp();

this.setData({

cur_year: newYear,

cur_month: newMonth

})

} else {

let newMonth = cur_month + 1;

let newYear = cur_year;

if (newMonth > 12) {

newYear = cur_year + 1;

newMonth = 1;

}

this.calculateEmptyGrids(newYear, newMonth);

this.calculateDays(newYear, newMonth);

this.onGetSignUp();

this.setData({

cur_year: newYear,

cur_month: newMonth

})

}

},

//获取当前用户该任务的签到数组

onGetSignUp:function(){

var that = this;

var Task_User = Bmob.Object.extend("task_user");

var q = new Bmob.Query(Task_User);

q.get(that.data.objectId, {

success: function (result) {

that.setData({

signUp : result.get("signUp"),

count : result.get("score")

});

//获取后就判断签到情况

that.onJudgeSign();

},

error: function (object, error) {

}

});

}

})

Calendar.json json文件

这里仅仅是改变了导航栏上的标题文字

{

"navigationBarTitleText": "打卡日历"

}

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

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

php 微信小程序签到打卡,微信小程序实现打卡日历功能相关推荐

  1. python 微信小程序签到系统_微信小程序签到功能

    本文实例为大家分享了简易微信小程序签到功能的具体代码,供大家参考,具体内容如下 一.效果图 点击签到后 二.数据库 用一张数据表存用户签到的信息,每次用户签到都会往表中添加一条记录了用户id和签到日期 ...

  2. python 微信小程序签到系统_微信小程序实现签到的日历功能

    前言 因为要做签到,所以要写了个日历. 只有基础的日历,签到需要自行实现. (我等下也要实现签到了-) 效果图 wxml {{ item }} wx:for="{{ dateData }}& ...

  3. 微信小程序实现日历功能(附加签到、迟到、未签的状态显示)

    最近接的毕设,做一个考勤系统,练练手:对于日历功能的实现,参考了一位大佬的文章: 微信小程序之打卡日历 大佬使用的对象属性方法,而我直接把它分成了两组数据: 这是针对我自己的数据所作出的一些改变: 效 ...

  4. 微信背单词类小程序,小鸡单词源码下载,打卡微信小程序

    微信背单词类小程序,小鸡单词源码下载,微信小程序开发学习案例,小程序开发教程.一个用来背单词每天打卡的微信小程序,还有词汇测试,包含多种词库后台由腾讯云wafer解决方案. 前段时间开始学做微信小程序 ...

  5. 开发一个钉钉小程序和微信小程序签到APP的具体学习报告

    [我想说的话:开发这个东西的初衷是为了想将所学融入日常生活中,恰好学长开发了一个i重科,我想挑战一下结合人工智能的签到app会是什么样的体验.在这个过程中我面临了很多困难,一度怀疑自己,但是现在我还是 ...

  6. 微信小程序-打卡激励小程序—随笔录-tabber无效

    一个突发奇想想要写一个自己的打卡激励小程序,随想随做.动手开干. 距离上一次写微信小程序应该是在两三年前了 ,时隔这么久在提起,很多都陌生了,开发全靠文档,啊哈哈哈哈. 笔录1. 描述:用户进入小程序 ...

  7. 考研打卡app小程序第二篇(微信用户授权)

    安卓和小程序体验 小程序体验 安卓版本体验 安卓体验 一.小程序结构 目录结构 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的 ...

  8. 小程序 formid 生成_微信电子计次卡生成小程序

    "电子计次卡生成工具"是一款免费创建计次卡的工具,商家能够简单快速的创建,发放,核销电子计次卡,并可以查看计次卡的使用与核销数据. 计次卡是指顾客购买或获得赠送相应的消费或服务次数 ...

  9. php 小程序 运动步数_微信小程序步数运动-收益讲解

    不得不佩服,步数小程序的厉害之处. 把闲散的运动步数,转化成一种可量化的社交货币,流动保存起来,探索出一种门槛低,又健康的经济模式. 对用户,真金白银的刺激,免费步数换取/抵现商品,红包,充值卡等. ...

  10. 程序左上角的字_微信内测7.0.7新版本,小程序迎来大改动!

    最近几个月来,微信就跟打了鸡血一样不断更新了多个版本上线多个新功能.此前7月末,微信安卓7.0.6带来了将收藏笔记,文件预览等页面设为浮窗的功能,目前最多支持5个文档或笔记设为浮窗.这不,距离微信7. ...

最新文章

  1. ng-options渲染的第一项为空的解决办法
  2. python中怎么输出中文-python中使用print输出中文的方法
  3. 77.数据库里怎么预防死锁?-80.视图索引
  4. 用python pandas按块读取超大csv/txt
  5. 链表之单链表约瑟夫问题(三)
  6. 安卓逆向_7 --- 六种快速定位关键 Smali 代码的方法 ( 去掉 RE 广告 )
  7. 深交所与工信部签署优质中小企业上市培育战略合作协议
  8. 对话DDM:分布式数据库中间件全解析
  9. vue中的传参的两种方式
  10. GIMP教程 3 扭曲变换工具 (瘦脸 瘦腿)
  11. idm2021中文版序列号加速下载百度云网盘大文件教程
  12. AdapterView与Adapter
  13. iTEXT将html文档转PDF,spire.doc包html转word(包括样式修改和添加图片/页码等设置)
  14. 微信小程序 tab点击切换(不滑动)
  15. 小手的图标css,CSS中cursor属性给标签加上小手形状
  16. android x86 5.1 微信,微信5.1终于来了!微信5.1安卓版正式发布
  17. C实现 费氏查找算法
  18. index.php打开失败,phpmyadmin无法打开index.php的解决方法
  19. 北航计算机复试英语,考研并不困难:北航计算机考研之路
  20. 浮点数表示及其实现.

热门文章

  1. A detailed derivation for the Bias Variance tradeoff Decomposition
  2. 关于智能水表背后的“节水效应”
  3. 阿里云的服务器、腾讯云的域名,域名解析失败的解决方案
  4. python re模块_python 正则表达式 (重点) re模块
  5. Android图片缓存框架 - Fresco的GenericDraweeHierarchy (五)
  6. Linux:使用upower命令查看电池信息
  7. Istio的Ingress与Egress网关
  8. mysql workbench 闪电_MySQL Workbench下载|可视化数据库设计建模(MySQL Workbench) 8.0 最新版-闪电下载吧...
  9. C#语言实例源码系列-异或算法加密解密
  10. JAVA操作Word合并、替换占位符、Word插入富文本、生成水印