微信小程序日历效果


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实现禁止后退的方法
Dec 27 Javascript
不同浏览器对回车提交表单的处理办法
Feb 13 Javascript
javascript 节点遍历函数
Mar 28 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
js简单实现HTML标签Select联动带跳转
Oct 23 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
学习JavaScript设计模式(接口)
Nov 26 Javascript
jQuery增加与删除table列的方法
Mar 01 Javascript
vue综合组件间的通信详解
Nov 06 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
JavaScript Array.flat()函数用法解析
Sep 02 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 设计模式之 工厂模式
2008/12/19 PHP
php判断是否为json格式的方法
2014/03/04 PHP
为PHP5.4开启Zend OPCode缓存
2014/12/26 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
Firefox div高度自适应
2009/04/28 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
javascript常见操作汇总
2014/09/03 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python单链表简单实现代码
2016/04/27 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
GWebs公司笔试题
2012/05/04 面试题
工程招投标邀请书
2014/01/26 职场文书
党员承诺书格式
2014/05/21 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
超市食品安全承诺书
2015/04/29 职场文书
运动会开幕式主持词
2015/07/01 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
python模板入门教程之flask Jinja
2022/04/11 Python