微信小程序日历效果


Posted in Javascript onDecember 29, 2018

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

源码下载地址

项目需要一个日历功能,花了一天时间实现的微信小程序日历,js大小只有几k,引入了bootstrap字体图标(文件icon.wxss,该字体已经bootstrap字体图标需要的字体)看起来有80k,出去icon.wxss整个只有几k,有问题欢迎指正

如图:

微信小程序日历效果

index.wxml 

<view class="page">
 <view class="box">
  <view class="box-flex">
   <view class="flex-item">
    <view class="item-content" bindtap="doDay" data-key='left'>
     <view class="glyphicon glyphicon-triangle-left"></view>
    </view>
   </view>
   <view class="flex-item item-content-current-day">
    <view class="item-content">{{currentDate}}</view>
   </view>
   <view class="flex-item">
    <view class="item-content" bindtap="doDay" data-key="right">
     <view class="glyphicon glyphicon-triangle-right"></view>
    </view>
   </view>
  </view>
  <view class="box-flex">
   <view class="flex-item">
    <view class="item-content">一</view>
   </view>
   <view class="flex-item">
    <view class="item-content">二</view>
   </view>
   <view class="flex-item">
    <view class="item-content">三</view>
   </view>
   <view class="flex-item">
    <view class="item-content">四</view>
   </view>
   <view class="flex-item">
    <view class="item-content">五</view>
   </view>
   <view class="flex-item">
    <view class="item-content">六</view>
   </view>
   <view class="flex-item">
    <view class="item-content">日</view>
   </view>
  </view>
  <view class="box-flex">
   <view class="flex-item" wx:for="{{currentDayList}}" wx:for-index='key' wx:for-item="vo" wx:key="{{key}}">
     <view class="item-content" wx:if="{{currentDay != vo}}">{{vo}}</view>
     <view class="item-content bk-color-day" wx:else>{{vo}}</view>
   </view>
  </view>
 </view>
</view>

index.wxss

@import '../../dist/css/icon.wxss';
page {
 background-color: #2a8cef;
 background:-webkit-gradient(linear, 0 0, 0 bottom, from(#2a8cef), to(#8A2BE2));
 display: flex;
 flex-direction: column;
 width: 100%;
 height: 100%;
 flex-wrap: nowrap;
 justify-content: flex-start;
 align-items: stretch;
 font-size: 14px;
}
 
.box {
 display: block;
 margin: 10px;
}
 
.box-flex {
 display: -webkit-box;
 display: -webkit-flex;
 display: flex;
 flex-wrap: wrap;
}
 
.flex-item {
 flex-flow: nowrap;
 flex-grow: 1;
 flex-shrink: 1;
 width: 14.2%;
}
 
.item-content {
 margin: 5px;
 padding: 0 10px;
 text-align: center;
 background-color: #000;
 height: 2rem;
 line-height: 2rem;
 color: #fff;
}
 
.bk-color-day {
 background-color: #8A2BE2;
}
 
.item-content-current-day {
 flex-grow: 2;
}

index.js 

var app = getApp();
Page({
  data: {
    currentDate: "2017年05月03日",
    dayList: '',
    currentDayList: '',
    currentObj: '',
    currentDay: ''
  },
  onLoad: function (options) {
    var currentObj = this.getCurrentDayString()
    this.setData({
      currentDate: currentObj.getFullYear() + '年' + (currentObj.getMonth() + 1) + '月' + currentObj.getDate() + '日',
      currentDay: currentObj.getDate(),
      currentObj: currentObj
    })
    this.setSchedule(currentObj)
  },
  doDay: function (e) {
    var that = this
    var currentObj = that.data.currentObj
    var Y = currentObj.getFullYear();
    var m = currentObj.getMonth() + 1;
    var d = currentObj.getDate();
    var str = ''
    if (e.currentTarget.dataset.key == 'left') {
      m -= 1
      if (m <= 0) {
        str = (Y - 1) + '/' + 12 + '/' + d
      } else {
        str = Y + '/' + m + '/' + d
      }
    } else {
      m += 1
      if (m <= 12) {
        str = Y + '/' + m + '/' + d
      } else {
        str = (Y + 1) + '/' + 1 + '/' + d
      }
    }
    currentObj = new Date(str)
    this.setData({
      currentDate: currentObj.getFullYear() + '年' + (currentObj.getMonth() + 1) + '月' + currentObj.getDate() + '日',
      currentObj: currentObj
    })
    this.setSchedule(currentObj);
  },
  getCurrentDayString: function () {
    var objDate = this.data.currentObj
    if (objDate != '') {
      return objDate
    } else {
      var c_obj = new Date()
      var a = c_obj.getFullYear() + '/' + (c_obj.getMonth() + 1) + '/' + c_obj.getDate()
      return new Date(a)
    }
  },
  setSchedule: function (currentObj) {
    var that = this
    var m = currentObj.getMonth() + 1
    var Y = currentObj.getFullYear()
    var d = currentObj.getDate();
    var dayString = Y + '/' + m + '/' + currentObj.getDate()
    var currentDayNum = new Date(Y, m, 0).getDate()
    var currentDayWeek = currentObj.getUTCDay() + 1
    var result = currentDayWeek - (d % 7 - 1);
    var firstKey = result <= 0 ? 7 + result : result;
    var currentDayList = []
    var f = 0
    for (var i = 0; i < 42; i++) {
      let data =[]
      if (i < firstKey - 1) {
        currentDayList[i] = ''
      } else {
        if (f < currentDayNum) {
          currentDayList[i] = f + 1
          f = currentDayList[i]
        } else if (f >= currentDayNum) {
          currentDayList[i] = ''
        }
      }
    }
    that.setData({
      currentDayList: currentDayList
    })
  }
})

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

Javascript 相关文章推荐
利用javascript移动div层-javascript 拖动层
Mar 22 Javascript
Javascript实现的类似Google的Div拖动效果代码
Aug 09 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
Jan 15 Javascript
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
jQuery实现ichat在线客服插件
Dec 29 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
JavaScript拖动层Div代码
Mar 01 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
Apr 07 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
五分钟搞懂Vuex实用知识(小结)
Aug 12 Javascript
深入浅析React中diff算法
May 19 Javascript
微信小程序日历组件使用方法详解
Dec 29 #Javascript
微信小程序自定义可滑动日历界面
Dec 28 #Javascript
10行代码实现微信小程序滑动tab切换
Dec 28 #Javascript
微信小程序实现复选框效果
Dec 28 #Javascript
6行代码实现微信小程序页面返回顶部效果
Dec 28 #Javascript
微信小程序下拉框组件使用方法详解
Dec 28 #Javascript
微信小程序实现星级评价效果
Dec 28 #Javascript
You might like
PHP 时间日期操作实战
2011/08/26 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
php 基础函数
2017/02/10 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
javascript 函数使用说明
2010/04/07 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
javascript中 try catch用法
2015/08/16 Javascript
微信JS接口大全
2016/08/25 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
html5时钟实现代码
2010/10/22 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
建筑专业自荐信
2013/10/18 职场文书
资源环境与城市管理专业推荐信
2013/11/30 职场文书
工作会议主持词
2014/03/17 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
乡镇团代会开幕词
2016/03/04 职场文书