微信小程序实现课程表

1.实现效果

在这里插入图片描述

2.实现步骤

2.1 获取当前日期一周数据

Date.getDay():
getDay() 方法返回指定日期是星期几(从 0 到 6,星期日为 0,星期一为 1,依此类推。)。

var d = new Date();//2022-8-11
var n = d.getDay();//4--周四

Date.getDate():
getDate() 方法返回指定日期在月中的第几天(从 1 到 31)。

var d = new Date();//2022-8-11
var n = d.getDate();//11

Date.setDate(day):
setDate() 方法将月份中的某一天设置为日期对象。

var d = new Date();//2022-8-11
d.setDate(15);//Mon Aug 15 2022 23:17:45 GMT+0800 (中国标准时间)

Date.getFullYear()
getFullYear() 方法可返回一个表示年份的 4 位数字。

var d = new Date():
var n = d.getFullYear();//2022

Date.getMonth() :
getMonth() 方法可返回表示月份的数字。返回值是 0(一月) 到 11(十二月) 之间的一个整数。( 一月为 0, 二月为 1, 以此类推。)

var d = new Date();
var n = d.getMonth();//7

日期格式化成yyyy-mm-dd格式:

/*** 格式化日期* @param {*} time */
export const formateDate = (time) => {let year = time.getFullYear();let month = time.getMonth() + 1 < 10 ? '0' + (time.getMonth() + 1) : (time.getMonth() + 1);let day = time.getDate() < 10 ? '0' + time.getDate() : time.getDate();return year + '-' + month + '-' + day;
}

根据当前日期获取本周内数据

/*** 获取当前日期一周内的时间* @param {*} data 日期Date*/
export const getCurrWeekList = (data) => {//根据日期获取本周周一~周日的年-月-日let weekList = [],date = new Date(data);//获取当前日期为周一的日期date.setDate(date.getDay() == "0" ? date.getDate() - 6 : date.getDate() - date.getDay() + 1);// push周一数据weekList.push(formateDate(date));console.log(weekList)//push周二以后日期for (var i = 0; i < 6; i++) {date.setDate(date.getDate() + 1);weekList.push(formateDate(date));}return weekList;
}
//["2022-08-08", "2022-08-09", "2022-08-10", "2022-08-11", "2022-08-12", "2022-08-13", "2022-08-14"]

将得到的一周数据,拼接成我们想要的内容

 let time = new Date(),list = getCurrWeekList(time),weekList = []list.forEach(item => {weekList.push({day: [item.split('-')[1], item.split('-')[2]].join('-'),//取字段eg:08-11week: "星期" + "日一二三四五六".charAt((new Date(item)).getDay()),//对应周几isCurr: formateDate(time) == item//高亮当天日期})});

2.2 页面布局及过渡动画等效果

页面布局
在这里插入图片描述
列表过渡动画

animation: show 1.5s ease-in-out;@keyframes show {0% {margin-left: 20rpx;}100% {margin-left: 0;}
}

文字倾斜

  font-style: italic;/* 斜体 font-style:oblique;或者 font-style: italic;*/

点击课表详情弹框过渡效果
注意:transition不能生效于一个从无到有的元素​。


.modal.noShow {top: -0%;opacity: 0;transition: all 1s;
}.modal.show {top: 50%;transition: all 1s;opacity: 1;
}

2.3 课表数据

  • 如页面布局中,黑框数据为一组,一行最多7条数据,排除周六日,正常最多为5条数据。
  • 针对无数据项,正常添加数据(为补齐页面,页面对齐),为该项设置type为0(表示无数据),并且过滤点击详情事件。

3.实现代码

3.1 页面

<view class="flex-row head"><view class="head-left flex-column j_c"><image src="https://s3.bmp.ovh/imgs/2022/07/27/6289fe4ab016c74a.png" class="head-icon" /><text class="head-left-text one"></text><text class="head-left-text two"></text><text class="head-curr-week">{{currentWeek}}</text></view><view class="head-right flex-row j_b"><view class="flex-column j_c" wx:for="{{weekList}}" wx:key="list"><text class="head-week {{item.isCurr && 'head-right-curr'}}">{{item.week}}</text><text class=" {{item.isCurr && 'head-right-curr'}}">{{item.isCurr?'今天':item.day}}</text></view></view>
</view>
<view class="container flex-row mb20"><view class="container-left flex-column j_b"><block wx:for="{{time.one}}" wx:key="list"><view class="flex-column j_c"><text class="con-title">{{item.index}}</text><text>{{item.timeStart}}</text><text>{{item.timeEnd}}</text></view></block></view><view class="container-right  flex col j_c"><view class="flex-row mb10"><view class="con-item flex-column j_c " wx:for="{{schedule.one}}" wx:key="list" style="background: {{item.color}};" catchtap="{{item.type ? 'getDetail':''}}" data-item="{{item}}"><text class="con-item-subj line_ellipsis">{{item.sub}}</text><text class="line_ellipsis">{{item.tec}}</text><text class="line_ellipsis">{{item.add}}</text></view></view><view class="flex-row"><view class="con-item flex-column j_c " wx:for="{{schedule.two}}" wx:key="list" style="background: {{item.color}};" catchtap="{{item.type ? 'getDetail':''}}" data-item="{{item}}"><text class="con-item-subj">{{item.sub}}</text><text>{{item.tec}}</text><text>{{item.add}}</text></view></view><image src="https://s3.bmp.ovh/imgs/2022/07/27/85dabf1d5821a98b.png" class="con-icon" /></view>
</view>
<view class="container flex-row mb20"><view class="container-left left1"><block wx:for="{{time.two}}" wx:key="list"><view class="flex-column j_c"><text class="con-title">{{item.index}}</text><text>{{item.timeStart}}</text><text>{{item.timeEnd}}</text></view></block></view><view class="container-right right1  flex col j_c"><view class="flex-row"><view class="con-item flex-column j_c " wx:for="{{schedule.three}}" wx:key="list" style="background: {{item.color}};" catchtap="{{item.type ? 'getDetail':''}}" data-item="{{item}}"><text class="con-item-subj line_ellipsis">{{item.sub}}</text><text class="line_ellipsis">{{item.tec}}</text><text class="line_ellipsis">{{item.add}}</text></view></view><image src="https://s3.bmp.ovh/imgs/2022/07/27/85dabf1d5821a98b.png" class="con-icon" /></view>
</view>
<view class="container flex-row"><view class="container-left left1"><block wx:for="{{time.three}}" wx:key="list"><view class="flex-column j_c"><text class="con-title">{{item.index}}</text><text>{{item.timeStart}}</text><text>{{item.timeEnd}}</text></view></block></view><view class="container-right right1 flex col j_c"><view class="flex-row"><view class="con-item flex-column j_c " wx:for="{{schedule.four}}" wx:key="list" style="background: {{item.color}};" catchtap="{{item.type ? 'getDetail':''}}" data-item="{{item}}"><text class="con-item-subj line_ellipsis">{{item.sub}}</text><text class="line_ellipsis">{{item.tec}}</text><text class="line_ellipsis">{{item.add}}</text></view></view><image src="https://s3.bmp.ovh/imgs/2022/07/27/85dabf1d5821a98b.png" class="con-icon" /></view>
</view>
<!-- 详情弹框 -->
<view class="mask" hidden="{{!isShow}}" catchtap="close"></view>
<view class="modal flex-column j_c {{isShow ? 'show':'noShow'}}" style="background: {{current.color}};"><view>{{current.sub}}</view><view>{{current.add}}</view><view>{{current.tec}}</view>
</view>

3.2 样式

page {padding: 30rpx 20rpx;
}.head {margin-bottom: 20rpx;
}.head-left {border-radius: 10rpx;height: 125rpx;background: #fff;width: 90rpx;margin-right: 10rpx;position: relative;
}.head-left-text {position: absolute;color: #7e7a7a;font-size: 22rpx;
}.head-curr-week {font-weight: bold;font-size: 30rpx;font-style: italic;/* 斜体 font-style:oblique;或者 font-style: italic;*/
}.head-left-text.one {right: 2px;top: 2px;
}.head-left-text.two {left: 2px;bottom: 2px;
}.head-week {font-weight: bold;margin-bottom: 10rpx;color: #333;
}.head-right-curr {color: pink;
}.head-icon {position: absolute;width: 40rpx;height: 40rpx;top: -10rpx;left: -10rpx;
}.head-right {border-radius: 10rpx;height: 125rpx;background: #fff;width: 610rpx;font-size: 23rpx;box-sizing: border-box;padding: 0 10rpx;color: #7e7a7a;
}.con-title {font-weight: bold;margin-bottom: 6rpx;color: #333;font-size: 27rpx;font-style: italic;
}.container-left {border-radius: 10rpx;height: 500rpx;background: #fff;width: 90rpx;margin-right: 10rpx;box-sizing: border-box;padding: 20rpx 0;font-size: 24rpx;color: #7e7a7a;
}.container-right {border-radius: 10rpx;height: 500rpx;background: #fff;width: 610rpx;position: relative;box-sizing: border-box;padding: 20rpx 10rpx;
}.con-icon {position: absolute;width: 50rpx;height: 50rpx;bottom: -10rpx;right: -10rpx;
}.container-left.left1,
.container-right.right1 {height: 250rpx;
}.con-item {width: 80rpx;height: 225rpx;border-radius: 10rpx;margin-right: 7rpx;flex-shrink: 0;font-size: 17rpx;color: #fff;box-sizing: border-box;padding: 10rpx;line-height: 28rpx;animation: show 1.5s ease-in-out;
}@keyframes show {0% {margin-left: 20rpx;}100% {margin-left: 0;}
}.con-item-subj {font-weight: bold;font-size: 19rpx;margin-bottom: 5rpx;
}.con-item:last-child {margin-right: 0;
}/* 多行文字换行 */
.line_ellipsis {overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;
}/* 弹框 */
.modal {width: 550rpx;height: 350rpx;border-radius: 20rpx;position: fixed;z-index: 1111;left: 50%;transform: translate(-50%, -50%);background: #fff;box-sizing: border-box;padding: 20px;color: #7e7a7a;font-size: 27rpx;line-height: 40rpx;
}.modal.noShow {top: -0%;opacity: 0;transition: all 1s;
}.modal.show {top: 50%;transition: all 1s;opacity: 1;
}

3.3 交互

import {getCurrWeekList,formateDate
} from '../utils/tools'
Page({data: {currentWeek: 10,time: {one: [{index: 1,timeStart: '08:00',timeEnd: '08:45'},{index: 2,timeStart: '08:55',timeEnd: '09:40'},{index: 3,timeStart: '09:50',timeEnd: '10:45'},{index: 4,timeStart: '10:50',timeEnd: '11:35'}],two: [{index: 5,timeStart: '13:30',timeEnd: '14:15'},{index: 6,timeStart: '14:25',timeEnd: '15:10'},],three: [{index: 7,timeStart: '15:20',timeEnd: '16:05'},{index: 8,timeStart: '16:15',timeEnd: '17:00'},]},schedule: {one: [{sub: '编译原理',add: 'B202',tec: "苏苏苏",color: '#fad0c4',type: 1, //0-无  1-有},{sub: '',add: '',tec: "",color: '',type: 0,}, {sub: '操作系统',add: 'N502',tec: "苏苏苏",color: '#ff9a9e',type: 1,},{sub: '',add: '',tec: "",color: '',type: 0,},{sub: '',add: '',tec: "",color: '',type: 0,},],....},weekList: [],isShow: false,current: {},},getDetail(e) {let {item} = e.currentTarget.dataset;this.setData({current: item,isShow: true})},close() {this.setData({isShow: false})},onShow() {let time = new Date(),list = getCurrWeekList(time),weekList = []list.forEach(item => {weekList.push({day: [item.split('-')[1], item.split('-')[2]].join('-'),week: "星期" + "日一二三四五六".charAt((new Date(item)).getDay()),isCurr: formateDate(time) == item})});this.setData({weekList,})},
})

4.更多小程序demo,尽在苏苏的码云如果对你有帮助,欢迎你的star+订阅!

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

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

相关文章

学生表,选课表,课程表

课后作业 一、用Navicat Premium 12软件创建三张表&#xff1a;学生表、选课表、课程表 学生表(学号, 姓名, 性别, 年龄, 电话) - 学号是字符串类型 选课表(学号, 课程号, 成绩) 课程表(课程号, 课程名, 课时数) - 课程号是字符串类型 学生表&#xff1a; 选课表&#xff1a; …

Android课程表的设计开发

Android课程表的设计开发 下载链接 鉴于很多人需要源码&#xff0c;这里给下代码。 下载地址&#xff08;需要5积分&#xff0c;支持下&#xff08;积累点积分。。。&#xff09;&#xff0c;没有积分的直接留言邮箱&#xff0c;我发给你或者找其他已经发过的人要下&#xf…

超级课程表课表的界面的实现

由于毕业设计有一个功能模块是课程表,就想模仿一下超级课程表的界面,可是开始做的时候却没有一点头绪,百度google均无果,在CSDN和知乎上提问了也没人回答,总之自己鼓捣了几天还是弄出来了,虽然实现的方法很挫。。。因为有好几个人都发私信问我怎么实现的,现在毕设做完了…

尤瓦尔最新演讲:人工智能不需要意识就可以毁灭人类文明

我们现在必须与一种新的大规模杀伤性武器作斗争&#xff0c;这种武器可以消灭我们的精神和社会世界。核武器和人工智能最大的区别是&#xff0c;核武器不能制造更强大的核武器。 但人工智能可以产生更强大的人工智能&#xff0c;所以我们需要在人工智能失去控制之前迅速采取行动…

chatgpt赋能python:Python绘制雷达图教程

Python绘制雷达图教程 在数据分析和可视化中&#xff0c;雷达图是一种非常有用的可视化工具&#xff0c;用于显示多个变量的相对大小。在这篇文章中&#xff0c;我们将介绍如何使用Python绘制雷达图&#xff0c;使用Matplotlib和Seaborn这两个Python数据可视化库。 准备数据 …

测试职业的发展方向

测试职业转型 很多工作了几年的测试人员都会产生迷惘&#xff0c;随着经验的累积和技能的提升&#xff0c;会有一个瓶颈期。未来应该往哪个方向发展&#xff0c;之前说过做测试要懂得很多技能和知识。正因为如此测试可以发展的方向选择面就非常广了&#xff0c;既可以继续在测试…

重塑职业未来:在竞争激烈的职场上脱颖而出的关键策略

在竞争激烈的职场上&#xff0c;各种职场难题时常出现&#xff0c;如何进行有效沟通、如何应对工作压力、如何提升职业能力等&#xff0c;这都是需要去克服的问题。下面分享一下职场老人的经验&#xff01; 一、你遇到过哪些职场问题&#xff1f;分享一下你是怎么解决的呢&…

未来软件测试人员会失业?看ChatGPT怎么说

Q&#xff1a;未来软件测试人员会失业&#xff1f; A&#xff1a;虽然自动化测试和AI技术的应用已经带来了一定的冲击&#xff0c;但是软件测试人员未来失业的可能性非常低。以下是几个原因&#xff1a; 软件测试是软件开发生命周期的重要环节。在软件开发过程中&#xff0c;…

AI_News周刊:第二期

2023.02.13—2023.02.17 1.ChatGPT 登上TIME时代周刊封面 这一转变标志着自社交媒体以来最重要的技术突破。近几个月来&#xff0c;好奇、震惊的公众如饥似渴地采用了生成式人工智能工具&#xff0c;这要归功于诸如 ChatGPT 之类的程序&#xff0c;它对几乎任何查询做出连贯&a…

各大工作室都在用的视觉特效软件,开启你的虚拟制作之旅

为您的虚拟制作设置的免费视觉特效工具 使用领先工作室们所信任的创意资源管理软件&#xff0c;免费开始您的下一个虚拟制作项目。 花更多时间在创作上&#xff0c;更少时间在设置上 增强型Studio包 —— 现已可以部署在微软 Azure 上使用 —— 包含了您所需要的所有工具&…

博主,公司让我们无限期放假!

推荐阅读&#xff1a;程序员降薪40%去国企&#xff0c;只因要35岁了&#xff01;值得吗&#xff1f; 下午收到一位网友的求助&#xff1a; 公司无故辞退员工&#xff0c;却不按正常裁员程序走。公司以没钱为由&#xff0c;给出2种方案&#xff1a; 一个月赔偿&#xff1b;无限期…

网址被腾讯拦截的处理方法

事发于2021年6月5日&#xff0c;为主域名的其中一个子域名被拦截&#xff0c;主域名未被拦截&#xff0c;原因为恶意广告&#xff0c;恶意营销。 网站内容为普通商城类&#xff0c;不存在强制推广&#xff0c;于是进行站长申诉&#xff0c;反馈结果为驳回~ 2021年6月7日&#…

文远知行COO张力离职;天翼云宣布进军国际市场;百家云发布AIGC新品;深兰科技推出大语言模型SaaS平台丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 文远知行COO张力离职 文远知行COO张力日前在个人社交平台发布疑似离职的相关动态。对此&#xff0c;文远知行方面今日回应称&#xff1a;“由于个人及家庭原因&#xff0c;文远知行COO张力最近决定辞任&#xf…

对话数十位学术合作代表:如何提升前沿技术在商业领域的落地应用?

从去年火出天际的元宇宙&#xff0c;到今年年初的现象级应用 ChatGPT&#xff0c;科技圈似乎从不缺少热门的技术概念与话题。尤其是在云计算、人工智能、大数据等技术呈爆发式增长的背景下&#xff0c;我们愈发体会到前沿技术对于产业产生的深远影响&#xff0c;而这也延伸出了…

Gartner:数字经济如火如荼,企业该做哪些准备?

从“数据二十条”发布&#xff0c;到国家数据局成立&#xff0c;广大中国企业应该从中嗅到哪些重要信号&#xff1f; “数据二十条”与国家数据局 关注数据领域的小伙伴估计都知道&#xff0c;我国近年来一直高度重视数字经济的发展&#xff0c;尤其是近期更是接连出台针对数据…

快商通与美亚、华大共同申报的AI课题被纳入科技局重大科技项目

近日&#xff0c;厦门市科学技术局对“2022年工业及信息化领域科技计划项目”进行公示&#xff0c;快商通与美亚柏科、华侨大学联合申报的“基于深度学习的可信多媒体鉴定关键技术研究及其产业化应用”课题成功入选厦门市重大科技项目&#xff01; ChatGPT震惊全球、效果爆棚&a…

近期最火AutoGPT|自主 AI 来了?来看怎么玩!

文章目录 近期最火AutoGPT&#xff5c;自主 AI 来了&#xff1f;来看怎么玩&#xff01;1. 它是什么&#xff1f;2. 能做些什么&#xff1f;3. 本质是什么&#xff1f;4. 怎么尝试5. 注意点6. 期待 近期最火AutoGPT&#xff5c;自主 AI 来了&#xff1f;来看怎么玩&#xff01;…

如何同步公众号内容到头条自媒体?

公众号的内容是无法直接同步到头条自媒体当中的&#xff0c;我们需要借助其他工具进行辅助&#xff0c;才能够在其他平台一键发布。在这个大数据时代&#xff0c;有很多自媒体创作者希望自己的作品能够在各大平台进行发布&#xff0c;这样不仅可以第一时间将自己的作品展示给粉…

如何将微信公众号内容同步到头条自媒体?

微信公众号上的内容是无法直接同步到头条自媒体上的&#xff0c;需要我们借助媒体管家才能够进行同步&#xff0c;如果我们想要将微信当中的公众号内容实的同步到头条自媒体&#xff0c;我们可以利用融媒宝&#xff0c;进行一键发布&#xff0c;这样我们就可以第一时间将自己的…

产品设计公司的头脑风暴是什么?

产品设计公司做产品设计的关键方法之一是兼收并蓄。正所谓千人千面&#xff0c;每个人都有着自己的想法。因此&#xff0c;在产品设计的早期阶段&#xff0c;产品的整体构思需要结合每个人的概念来激发产品的设计理念!头脑风暴在任何领域都起着至关重要的作用!产品的不断发展是…