微信小程序实现日历功能、日历转换插件、calendar

文章目录

  • 演示
  • html
  • JavaScript


演示

效果图

calendar


微信小程序实现交互

X2_2_2_25


html

<view wx:if="{{calendarArr.length}}"><view class="height_786 df_fdc_aic"><view class="grid_c7_104"><view class="font_weight_800 text_align_center {{index===0||index===week.length-1?'color_777':'color_333'}}" wx:for="{{week}}" wx:key="id">{{item.title}}</view></view><view class="grid_c7_104 margin_t_26 grid_row_gap_16"><view class="height_104 dis_c_cc radius_6 text_align_center {{item.date===date&&!item.$b?'back_primary color_EEE':''}} {{item.date===newDate?'font_weight_800 font_style_oblique color_FF780A':''}} {{item.$isWeekend}}" wx:for="{{calendarArr}}" wx:key="id" data-item="{{item}}" catchtap="selectCalendar"><view>{{item.cDay}}</view><view class="font_size_22 {{item.$festival}}">{{item.$SF}}</view></view></view></view><view class="margin_t_26 dis_r_c"><view class="width_95 dis_r_sa padding_tb_8 text_align_center shadow_0_0_6_6_CCC radius_8"><view wx:for="{{info.list}}" wx:key="id"><view>{{item.cTitle}}</view><view>{{item.lTitle}}</view></view></view></view><view class="margin_t_26"><picker-view class="height_300" indicator-class="height_90" value="{{pickerVal}}" bindchange="bindChange"><picker-view-column><view class="height_90 text_align_center dis_r_c" wx:for="{{years}}" wx:key="index"><text>{{item.title}}</text></view></picker-view-column><picker-view-column><view class="height_90 text_align_center dis_r_c" wx:for="{{months}}" wx:key="index"><text>{{item.title}}</text></view></picker-view-column></picker-view></view>
</view>

JavaScript

// 注意这里引入的方式
// 因为不想构建小程序
// 所以直接把下载好的日历转换文件夹放到小程序中引用即可
import calendar from '../../../utils/js-calendar-converter/src/index';Page({/*** 页面的初始数据*/data: {y: undefined,m: undefined,d: undefined,date: '',calendarArr: [],week: [{id: 'id0',title: '日',value: 0},{id: 'id1',title: '一',value: 1},{id: 'id2',title: '二',value: 2},{id: 'id3',title: '三',value: 3},{id: 'id4',title: '四',value: 4},{id: 'id5',title: '五',value: 5},{id: 'id6',title: '六',value: 6}],info: {},years: [],months: [],pickerVal: [0, 0],newDate: ''},/*** 选择年份与月份* @param {object} obj* @return {undefined} undefined*/bindChange({detail: {value}}) {let self = this,selfData = self.data,years = selfData.years,months = selfData.months,y = selfData.y,m = selfData.m,d = selfData.d,year = years[value[0]].value,month = months[value[1]].value,newDate = '';// 当滑动到不是当年当月的时候默认选中当月1号newDate = year !== y || month !== m ? `${year}-${month}-1` : `${year}-${month}-${d}`;self.setData({newDate,pickerVal: value}, () => self.createCalendar(year, month));},/*** 显示的信息* @param {object} obj* @return {Array} info*/handleInfo(obj) {let list = [{id: 'id1',cTitle: obj.cYear + '年',lTitle: obj.gzYear + obj.Animal + '年'},{id: 'id2',cTitle: obj.cMonth + '月',lTitle: obj.gzMonth + obj.IMonthCn},{id: 'id3',cTitle: obj.cDay + '日',lTitle: obj.gzDay + obj.IDayCn},{id: 'id4',cTitle: obj.ncWeek,lTitle: obj.astro}];obj.list = list;this.setData({info: obj});},/*** 创建日期* @param y 年* @return undefined*/selectCalendar({currentTarget: {dataset: {item}}}) {this.handleInfo(item);this.setData({newDate: item.date});},/*** 创建日期* @param y 年* @param m 月* @param d 日* @return [{}]*/creationDate(y, m, d) {let arr = [];for (let i = 1; i < d + 1; i++) {let obj = calendar.solar2lunar(y, m, i);arr.push({...obj});}return arr;},/*** 收集创建日期需要的数据(重要函数)* @param {Number} y 年* @param {number} m 月* @return [{}]*/createCalendar(y, m) {let self = this,selfData = self.data,newDate = selfData.newDate,y1 = y,y2 = y,y3 = y,m1 = m - 1,m2 = m,m3 = m + 1,d1 = undefined,d2 = undefined,d3 = undefined,arr1 = [],arr2 = [],arr3 = [],len2 = 0,nWeek1 = undefined,nWeek3 = undefined,info = {};if (m === 1)(y1 = y - 1, m1 = 12);if (m === 12)(y3 = y + 1, m3 = 1);d1 = calendar.solarDays(y, m1);d2 = calendar.solarDays(y, m2);d3 = calendar.solarDays(y, m3);arr1 = self.creationDate(y1, m1, d1);arr2 = self.creationDate(y2, m2, d2);arr3 = self.creationDate(y3, m3, d3);len2 = arr2.length;nWeek1 = arr2[0].nWeek;nWeek3 = arr2[len2 - 1].nWeek;nWeek1 = nWeek1 === 7 ? 0 : arr2[0].nWeek;nWeek3 = nWeek3 === 6 ? 0 : nWeek3 === 7 ? nWeek3 - 1 : 6 - nWeek3;// 前部分补全一个星期for (let i = arr1.length - 1; nWeek1 > 0; i--) {let item = arr1[i];item.$b = true;arr2.unshift(item);nWeek1--;}// 后部分补全一个星期for (let i = 0; i < nWeek3; i++) {let item = arr3[i];item.$b = true;arr2.push(item);}arr2 = arr2.map((item, i) => {if (item.IDayCn === '初一' && !item.festival && !item.Term && !item.lunarFestival) {item.$festival = '';item.$SF = item.IMonthCn;} else if (item.festival) {item.$festival = 'color_primary';item.$SF = item.festival;} else if (item.Term) {item.$festival = 'color_primary';item.$SF = item.Term;} else if (item.lunarFestival) {item.$festival = 'color_primary';item.$SF = item.lunarFestival;} else {item.$festival = '';item.$SF = item.IDayCn;}if (['星期六', '星期日'].includes(item.ncWeek) && item.cMonth === m) {item.$isWeekend = 'color_777';} else if (item.$b) {item.$isWeekend = 'color_CCC';} else {item.$isWeekend = 'color_333';}item.$id = `id${i+1}`;if (item.date === newDate) info = item;return item;});self.handleInfo(info);self.setData({calendarArr: arr2});},/*** 初始化*/init() {let self = this,y = undefined,m = undefined,d = undefined,years = [],months = [],pickerVal = [],date = new Date();y = date.getFullYear();m = date.getMonth() + 1;d = date.getDate();// 获取100年时间的日历for (let i = y - 95; i <= y + 5; i++) years.push({id: `id${i}`,title: i + '年',value: i});for (let i = 0; i < 12; i++) months.push({id: `id${i}`,title: i + 1 + '月',value: i + 1});pickerVal = [years.findIndex(item => item.value === y),months.findIndex(item => item.value === m)];self.setData({y,m,d,date: `${y}-${m}-${d}`,newDate: `${y}-${m}-${d}`,years,months},() => (self.createCalendar(y, m), self.setData({pickerVal})));},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.init();},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 数据库高可用

Redis 数据库的高可用 一.Redis 数据库的持久化 1.Redis 高可用概念 &#xff08;1&#xff09;在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 …

【Golang 接口自动化02】使用标准库net/http发送Post请求

目录 写在前面 发送Post请求 示例代码 源码分析 Post请求参数解析 响应数据解析 验证 发送Json/XMl Json请求示例代码 xml请求示例代码 总结 资料获取方法 写在前面 上一篇我们介绍了使用 net/http 发送get请求&#xff0c;因为考虑到篇幅问题&#xff0c;把Post单…

Spring Boot 缓存 Cache 入门

Spring Boot 缓存 Cache 入门 1.概述 在系统访问量越来越大之后&#xff0c;往往最先出现瓶颈的往往是数据库。而为了减少数据库的压力&#xff0c;我们可以选择让产品砍掉消耗数据库性能的需求。 当然也可以引入缓存,在引入缓存之后&#xff0c;我们的读操作的代码&#xff…

介绍壹牛NFT数字艺术藏品数藏源码

这个版本新增了不少功能&#xff0c;也修复了一些地方。 1.平台新增用户找回密码功能 2.平台新增短信注册&#xff08;实名制功能&#xff09; 3.平台新增主图后台添加功能 4.平台修复相关问题&#xff0c;系统高效运行 5、H5端与APP端在新UI完美适配 6、加入宝盒功能&…

Java方法的使用(重点:形参和实参的关系、方法重载、递归)

目录 一、Java方法 * 有返回类型&#xff0c;在方法体里就一定要返回相应类型的数据。没有返回类型&#xff08;void&#xff09;&#xff0c;就不要返回&#xff01;&#xff01; * 方法没有声明一说。与C语言不同&#xff08;C语言是自顶向下读取代码&#xff09;&#…

基于SpringBoot+Vue的车辆充电桩管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

STM32 LWIP UDP 一对一 一对多发送

STM32 LWIP UDP通信 前言设置 IP 地址UDP函数配置实验结果单播发送&#xff0c;一对一发送广播发送&#xff0c;一对多发送 可能遇到的问题总结 前言 之前没有接触过网络的通信&#xff0c;工作需要 UDP 接收和发送通信&#xff0c;在网上没有找到一对一、一对多的相关例程&am…

什么是SVM算法?硬间隔和软间隔的分类问题

SVM全称是supported vector machine(支持向量机)&#xff0c;即寻找到一个超平面使样本分成两类&#xff0c;并且间隔最大。 SVM能够执行线性或⾮线性分类、回归&#xff0c;甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。…

CentOS 8 错误: Error setting up base repository

配置ip、掩码、网关、DNS VMware网关可通过如下查看 打开网络连接 配置镜像的地址 vault.centos.org/8.5.2111/BaseOS/x86_64/os/

通过String字符生成base64编码在生成图片

* base64转图片 //对字节数组字符串进行Base64解码并生成图片 * param base64str base64码 * return // param savePath 图片路径private static final String savePath"image_ver\\verifyCode"; 判断是否为base64编码 public static void mainDD…

【JavaEE初阶】Servlet (三)MessageWall

在我们之前博客中写到的留言墙页面,有很严重的问题:(留言墙博客) 如果刷新页面/关闭页面重开,之前输入的消息就不见了.如果一个机器上输入了数据,第二个机器上是看不到的. 针对以上问题,我们的解决思如如下: 让服务器来存储用户提交的数据,由服务器保存. 当有新的浏览器打开页…

基于java的坦克大战游戏的设计与实现--答辨PPT--【毕业论文】

文章目录 本系列校训毕设的技术铺垫PPT主体层次封面页目录页&#xff1a;设计工具与相关技术&#xff1a;系统分析总体设计&#xff1a;详细设计测试结论&#xff1a; 小技巧 本系列校训 互相伤害互相卷&#xff0c;玩命学习要你管&#xff0c;天生我才必有用&#xff0c;我命…

React(1)——快速入门

一、React背景简介 官网和资料 英文官网: https://reactjs.org/中文官网: 快速入门 – React (docschina.org) 3、如果JS基础忘了及时查看文档&#xff1a;JavaScript - 学习 Web 开发 |多核 (mozilla.org) JavaScript - 标签 - 汤姆大叔 - 博客园 (cnblogs.com) 4、React…

Neo4j图数据基本操作

Neo4j 文章目录 Neo4jCQL结点和关系增删改查匹配语句 根据标签匹配节点根据标签和属性匹配节点删除导入数据目前的问题菜谱解决的问题 命令行窗口 neo4j.bat console 导入rdf格式的文件 :GET /rdf/ping CALL n10s.graphconfig.init(); //初始化 call n10s.rdf.import.fetch(&q…

【软件测试】webdriver常用API演示(Java+IDEA+chrome浏览器)

1.元素定位方法 对象的定位应该是自动化测试的核心&#xff0c;要想操作一个对象&#xff0c;首先应该识别这个对象。一个对象就是一个人一样&#xff0c;他会有各种的特征&#xff08;属性&#xff09;&#xff0c;如比我们可以通过一个人的身份证号&#xff0c;姓名&#xf…

Redis 笔记,基本数据类型、持久化、主从、集群等等问题

标题 &#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 标题Redis 基础笔记1、安装及环境搭建2、Redis 数据类型2.1、String2.2、List2.3、Hash2.4、Set2.5、Zset2.6、BitMap2.7、HyperLogLog2.8、Geospatial2.9、Stream 3、Redis 持久…

「BLIP 微调指南」以 Image-Text Captioning 任务为例

前言&#xff1a;近日需要用到 BLIP 微调下游任务&#xff0c;搜索发觉如今并无 BLIP 微调教程&#xff0c;下面就以 Image-Text Captioning 任务为例&#xff0c;演示如何完成 BLIP 模型在自己数据集上的微调。 目录 1. BLIP 介绍2. 关键代码定位3. 关键参数赋值4. 模型定义&a…

HTML一些基础知识

1、Web标准&#xff1a;主要包含结构、表现、行为。结构用于对网页元素进行整理和分类&#xff0c;主要指HTML。表现用于设置网页元素的板式、颜色、大小等外观样式&#xff0c;主要指的是CSS。行为主要指的是网页模型的定义以及交互的编写&#xff0c;主要是js文件。 Html相当…

DAY1,Qt [ 手动实现登录框(信息调试类,按钮类,行编辑器类,标签类的使用)]

1.手动实现登录框&#xff1b; ---mychat.h---头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> //打印信息 #include <QIcon> //图标 #include <QPushButton> //按钮 #include <QLineEdit> //行编辑器类 #in…

尚硅谷大数据项目《在线教育之采集系统》笔记002

视频地址&#xff1a;尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P032 P033 P033 P034 P035 P036 P032 P033 # 1、定义组件&#xff0c;为各组件命名 a1.sources r1 a1.channels c1 a1.sinks - k1# 2、配置sources&#xff0c;描述source a1.sour…