预览图
运行代码 代码资源包
wxml
签到头部
为了方便,我在这里写了两个头部,已签到用这种
<view class="headers_wrapper" wx:if="{{signtype=='2'}}"> <view class="for_headerleft"><image src="../../images/calendar2.png" ></image></view> <view class="for_headerright"> <view class="for_headerright_list">今日已签到</view> <view class="for_headerright_list1">已连续签到<span>{{seriesCount}}</span>天 </view> <view class="for_headerright_list2">再连续签到<span>{{series_gos}}</span>天即可获得更多奖励</view> </view> </view>
未签到
<view class="headers_wrapper" wx:if="{{signtype=='1'}}"> <view class="for_headerleft"><image src="../../images/calendar1.png" ></image></view> <view class="for_headerright"> <view class="for_headerright_list">今日未签到</view> <view class="for_headerright_list1">已连续签到<span>{{seriesCount}}</span>天 </view> <view class="for_headerright_list2">再连续签到<span>{{series_gos}}</span>天即可获得更多奖励</view> </view> </view>
日历wxml
<view class="containers"> <view class="clearPadding"> <view class="calendar"> <view class="calen_header"> <button class='calendar_month_prev' bindtap="sign_prev"> <image src="../../images/cle_btn.png" bindtap="sign_prev"></image> </button> <button class='calendar_month_next' bindtap="sign_next"> <image src="../../images/cle_btn.png" ></image> </button> </view> <view class="calenbox"> <view class="calendar_thisday"> <text>{{showYear}}</text>年<text>{{showMonth}}</text>月 </view> </view> <view class="calendar_wrapper"> <view class="week_day"> <view class="weeklist">日</view> <view class="weeklist">一</view> <view class="weeklist">二</view> <view class="weeklist">三</view> <view class="weeklist">四</view> <view class="weeklist">五</view> <view class="weeklist">六</view> </view> <view> <view class="month_day"> <view class="day_list" wx:for="{{signDays[0]}}" wx:key="un" wx:for-index="index" wx:for-item="item">{{item == null ? '' : item.normalday}} <view class="day_hover" wx:if="{{item.signday=='is'}}"></view> </view> </view> <view class="month_day"> <view class="day_list" wx:for="{{signDays[1]}}" wx:key="un" wx:for-index="index" wx:for-item="item">{{item == null ? '' : item.normalday}}<view class="day_hover" wx:if="{{signs.indexof(item)>-1}}"></view> <view class="day_hover" wx:if="{{item.signday=='is'}}"></view> </view> </view> <view class="month_day"> <view class="day_list" wx:for="{{signDays[2]}}" wx:key="un" wx:for-index="index" wx:for-item="item">{{item == null ? '' : item.normalday}} <view class="day_hover" wx:if="{{item.signday=='is'}}"></view> </view> </view> <view class="month_day"> <view class="day_list" wx:for="{{signDays[3]}}" wx:key="un" wx:for-index="index" wx:for-item="item">{{item == null ? '' : item.normalday}} <view class="day_hover" wx:if="{{item.signday=='is'}}"></view> </view> </view> <view class="month_day"> <view class="day_list" wx:for="{{signDays[4]}}" wx:key="un" wx:for-index="index" wx:for-item="item">{{item == null ? '' : item.normalday}} <view class="day_hover" wx:if="{{item.signday=='is'}}"></view> </view> </view> <view class="month_day"> <view class="day_list" wx:for="{{signDays[5]}}" wx:key="un" wx:for-index="index" wx:for-item="item">{{item == null ? '' : item.normalday}} <view class="day_hover" wx:if="{{item.signday=='is'}}"></view> </view> </view> </view> <!--控制月份日历输出--> </view> <view class="text-center" wx:if="{{signtype=='1'}}"> <button class="btn-qiandao" bindtap="sign_start" >签到</button> </view> <view class="text-center" wx:if="{{signtype=='2'}}"> <button class="btn-qiandao1" bindtap="sign_end" >已签到</button> </view> </view> </view> </view>
签到奖励部分,略。
js:
data部分
data: { signDay:[{"signDay":"9"},{"signDay":"11"},{"signDay":"12"},{"signDay":"15"}], signs:[1,2,3,5,6,7], signtype:"1", signDays:[], todayDate:"1", todayMonth:"", todayYear:"", nextMonth:"", nextYear:"", prevYear:"", prevMonth:"", seriesCount:"99", series_gos:"15", for_signs:"none", powerData:"0", },
调用自己画的日历js
var yangdate = require("../../utils/sign_in_ss.js");
// /** // * // * @authors 杨京葛 (1141407871@qq.com) // * @date 2018-05-21 19:26:19 // * @version $v1.01$ // */ // // // } var yang_date = { //iyear年份 //iMonth月份 //that //iyear年份 bulidCal : function(iYear, iMonth,that,signday) { var that =that; var aMonth = new Array(); aMonth[0] = new Array(7); aMonth[1] = new Array(7); aMonth[2] = new Array(7); aMonth[3] = new Array(7); aMonth[4] = new Array(7); aMonth[5] = new Array(7); var dCalDate = new Date(iYear, iMonth - 1, 1); var iDayOfFirst = dCalDate.getDay(); //判断当前月份第一天周几 var curMonthDays = new Date(dCalDate.getFullYear(), (dCalDate.getMonth()+1), 0).getDate(); //判断当前月份有多少天 console.log("本月共有 "+ curMonthDays +" 天"); console.log("本月第一天周 "+ iDayOfFirst); var iDaysInMonth = (iMonth, iYear); var iVarDate = 1; var d, w; for (d = iDayOfFirst; d < 7; d++) { console.log(signday); if(signday.indexOf(iVarDate)>-1){ //console.log(111); aMonth[0][d] = { signday:"is", normalday:iVarDate, }; }else{ //console.log(22); aMonth[0][d] = { signday:"nois", normalday:iVarDate, }; } iVarDate++; } //处理每月第一天出现位置 for (w = 1; w < 6; w++) { for (d = 0; d < 7; d++) { if (iVarDate <= iDaysInMonth) { if(signday.indexOf(iVarDate)>-1){ //console.log(111); aMonth[w][d] = { signday:"is", normalday:iVarDate, }; }else{ //console.log(22); aMonth[w][d] = { signday:"nois", normalday:iVarDate, }; } if(iVarDate==curMonthDays){ console.log(aMonth); that.setData({ signDays:aMonth, }); return aMonth; }else{ iVarDate++; } } } } //处理每月其他天位置 console.log(aMonth); return aMonth; }, //日历签到完成 }; module.exports = { yang_date: yang_date }
原始数据加载
onLoad: function (options) { var getToday = new Date(); var todayDate =getToday.getDate(); var todayMonths =getToday.getMonth(); var todayMonth=(todayMonths+1); var todayYear =getToday.getFullYear(); var todayss =getToday.getDate(); if(todayMonth<10){ var todayMonthss="0"+todayMonth; }else{ var todayMonthss=todayMonth; } console.log(todayss); var godates = todayYear + "-" + todayMonthss + "-01";//向服务器发送自己需要的签到月份数据 var that =this; wx.request({ url: '', method:"POST", header: { "Content-Type": "application/x-www-form-urlencoded", }, data: { date:godates, }, success: function (res) { if(res.data.status==1){ console.log(res.data); var $datas =res.data.data;//从服务器获取签到数据数组(1,2,3) var signDate_arr =new Array(); var anns = $datas.signDays; var count_signday =$datas.seriesCount; if(count_signday>9){ var series_gos ="0"; }else if(count_signday<0){ var series_gos =99; }else{ var series_gos =10-parseInt(count_signday); } that.setData({ seriesCount:count_signday, series_gos:series_gos, }); for(var p in anns){//遍历json对象的每个key/value对,p为key var newdats =anns[p]; signDate_arr.push(newdats); } if(signDate_arr.indexOf(todayss)>-1){ console.log("当前已签到"); that.setData({ signtype:"2", }); }else{ console.log("当前未签到"); that.setData({ signtype:"1", }); } console.log(signDate_arr[0]); yangdate.yang_date.bulidCal(todayYear,todayMonth,that,signDate_arr); //初始化加载日历 }else{ wx.showToast({ title: '网络不通畅', icon: 'loading', duration: 1500 }); } }, error:function () { wx.showToast({ title: '服务器错误', icon: 'loading', duration: 1500 }); } }); this.setData({ todayDate:todayDate, todayMonth:todayMonth, todayYear:todayYear, prevYear:todayYear, nextYear:todayYear, prevMonth:todayMonth, nextMonth:todayMonth, showYear:todayYear, showMonth:todayMonth, });//存入一份原始月份日期,一份用来跳转的月份 },
上一月 下一月切换
sign_prev: function () { console.log("上一月"); var showMonth=this.data.showMonth; var todayMonth =this.data.todayMonth; if(showMonth=="1"){ var showMonth="12"; var showYear=parseInt(this.data.showYear)-1; }else{ var showMonth=parseInt(this.data.showMonth)-1; var showYear=this.data.showYear; } if(parseInt(todayMonth-3)==showMonth){ wx.showToast({ title: '不能查看更多了', icon: 'loading', duration: 1500 }); return; } var that =this; if(showMonth<10){ var showMonths="0"+showMonth; }else{ var showMonths=todayMonth; } var godates = showYear + "-" + showMonths + "-01"; wx.request({ url: '网络请求', method:"POST", header: { "Content-Type": "application/x-www-form-urlencoded", }, data: { date:godates, }, success: function (res) { if(res.data.status==1){ console.log(res.data); var $datas =res.data.data;
/*从服务器获取上个月签到的日期(1,2,3,4,5)*/
var signDate_arr =new Array(); var anns = $datas.signDays; for(var p in anns){//遍历json对象的每个key/value对,p为key var newdats =anns[p]; signDate_arr.push(newdats); } console.log(signDate_arr[0]);
//引入日历默认 yangdate.yang_date.bulidCal(showYear,showMonth,that,signDate_arr); //初始化加载日历 }else{ wx.showToast({ title: '网络不通畅', icon: 'loading', duration: 1500 }); } }, error:function () { wx.showToast({ title: '服务器错误', icon: 'loading', duration: 1500 }); } }); this.setData({ showYear:showYear, showMonth:showMonth, }); }, sign_next: function () { console.log("下一月"); var showMonth=this.data.showMonth; var todayMonth =this.data.todayMonth; if(todayMonth==showMonth){ wx.showToast({ title: '未签到不能查看', icon: 'loading', duration: 1500 }); return; } if(showMonth=="12"){ var showMonth="1"; var showYear=parseInt(this.data.showYear)+1; }else{ var showMonth=parseInt(this.data.showMonth)+1; var showYear=this.data.showYear; } var that =this; if(showMonth<10){ var showMonths="0"+showMonth; }else{ var showMonths=todayMonth; } var godates = showYear + "-" + showMonths + "-01"; wx.request({ url: baseurl + '/user/getUserSignData', method:"POST", header: { "Content-Type": "application/x-www-form-urlencoded", "token": token }, data: { date:godates, }, success: function (res) { if(res.data.status==1){ console.log(res.data); var $datas =res.data.data; var signDate_arr =new Array(); var anns = $datas.signDays; for(var p in anns){//遍历json对象的每个key/value对,p为key var newdats =anns[p]; signDate_arr.push(newdats); } console.log(signDate_arr[0]); yangdate.yang_date.bulidCal(showYear,showMonth,that,signDate_arr); //初始化加载日历 }else{ wx.showToast({ title: '网络不通畅', icon: 'loading', duration: 1500 }); } }, error:function () { wx.showToast({ title: '服务器错误', icon: 'loading', duration: 1500 }); } }); this.setData({ showYear:showYear, showMonth:showMonth, }); },
签到,日历内塞入数据,或者执行onload加载数据插入日历
缺点: 代码挺冗杂的,有很多可优化的地方。待解决。
亮点:代码挺容易懂的