最新要闻
- OPPO Find N成为全国销量第二折叠屏!一经发布就大获成功
- 微速讯:首次使用钛合金螺丝!OPPO Find N2仅233g:折叠屏比iPhone还轻
- OPPO Find N2内外一致好屏:双120Hz+双E6 可自由悬停
- 让玩家心动的定制 ROG 6游戏手机《暗黑破坏神:不朽》典藏限量版图赏
- OPPO Find N2 233g比直板机还轻!央视点赞:刷新折叠屏手机新纪录
- 环球头条:特斯拉中国上线490元酒杯 限量卖 网友吐槽智商税
- 世界今日讯!女子连吃5天感冒药 多脏器功能衰竭:专家提醒小心这些症状
- IT工程师哪里工资最高?美国仅排第二 第一收入超过70万
- 天天看热讯:帧数暴涨40%!《巫师3》次时代版画质优化指南
- 20万级大杀器 长安深蓝首款SUV曝光:增程、纯电全都有
- 男主角是明星的小说有哪些?男主角是明星的小说推荐
- 科比最后一场比赛是什么时候?科比最后一场比赛是多少分?
- 鞋子防臭的小妙招有哪些?鞋子防臭喷雾哪个牌子好?
- 沙棘如何鉴别好坏?沙棘的功效作用与主治是什么?
- 玉碎了代表什么征兆?玉碎了有什么办法修复吗?
- 今日热议:4999元 小米13限量定制色明天首销:只有5万台
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
热讯:记录--手把手带你开发一个uni-app日历插件(并发布)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
相信我们在开发各类小程序或者H5,甚至APP时,会把uni-app作为一个技术选型,其优点在于一键打包多端运行,较为强大的跨平台的性能。但是,只要开发就免不了使用插件,所以Dcloud为了方便开发者同时也为注入活力,开放了uni的插件市场。从此,我们可以很方便的使用其中的一些第三方插件来满足我们要开发的一些业务需求了。但你知道怎么制作一款uni的插件吗?它又是如何发布到插件商城里的吗?
(相关资料图)
介绍
开发过微信小程序的朋友或许知道,它的主包限制成2M,我们在插件商城挑选插件时,其实还是要斟酌的,尽可能使用更轻量级的,使用起来更方便的。最近有个需求,页面中出现了一个日历,日历的功能很简单就是切换月份,后端一些特殊日期数据能用颜色标记一下即可。但引入的ui库的日历又有点大,借此机会,本期就按照需求特制了一款轻量级的日历插件进行分享,看看它是如何开发出来并发布到插件商城上面去的。
让我们先来看看发布使用后的效果吧:
开发
创建文件
我们先打开 HBuilder X,创建一个 uni-app的项目,在里面创建一个名叫 uni_modules的文件夹。
然后 uni_modules上点击右键,里面选择新建 uni_modules插件,然会出现一个弹框要求你对插件起名。
起名其实可以随意,最好语义化强一些还要带点自己的特色,比如,这款日历插件我起名叫 ml-calendar
,咳咳,大致意思就是 jsmask-light-calendar,也就是jsmask的轻量级日历,见笑了。就这样,点击创建,就会生成好一个插件结构,我们就会在这里面写关于这个插件的所有逻辑。
还没结束,我们还要在里面创建一个index.js的文件,里面写入:
import mlCalendar from "./components/ml-calendar/ml-calendar"export default mlCalendar
因为我们只涉及到一个ui组件,所以 export default
直接指到这个组件上就好了。这一步很关键,因为如果不写他的话,在引用这款插件的时候默认是找不到这个插件的,会报错查找失败。
依赖引入
因为本次需要快速开发出一款日历来,所以免不了出现很多时间形式的判断和验证,比如,如果日历是当天就不会显示阿拉伯数字了会直接显示汉字今日,所以生成的时候就要判断当前系统时间和日期是不是同一天上。所以,为了方便使用了 dayjs
,相信作为前端开发者没有不知道它的大名吧,它是一款极其轻量的时间库,当然你也可以自己把用到的手写出来,这样体积会更小,但这里为了方便和更多扩展可能就引入进来了。
这里的 dayjs
文件 ,为了省事,我是从node安装后的包里拷贝出来的:
现在就可以在 vue 文件中引入使用它了,当然,我这里还建了个libs文件夹专门来存储第三方库文件的。
import dayjs from "../../libs/dayjs.js"
传入参数
我们先来看看要实现的界面图:
export default { name: "ml-calendar", props: { value: { type: [Number, String, Date], default: "" }, range: { type: Array, default: () => ["2021-01", ""] }, rows: { type: Array, default: () => [] }, // ... }, // ...}
我们需要提前想好可能会传来什么值,会影响这个日历的生成,首先,肯定要知道需要哪年哪月的数据,value
这里可以传入多种类型然后再让dayjs处理出来,得到统一的日期格式,默认传空字符串,意思就是当月。毕竟,知道年份月份才能得到当月的天数生成周对应的日么。
range
代表时间范围,可以选择上图的左右箭头对应的上一个月和下一个月,月份不能超出范围。
而 rows
代表着你传入日期对应的标识色,如 :
let rows = [{ date: "2022-5-21", color: "#5F8BFB"}, { date: "2022-5-24", color: "#FBA75F"}, { date: "2022-5-26", color: "#FBA75F"}]
接下来,我们就围绕着这些参数去完成这个日历编写。
遍历日期
export default { name: "ml-calendar", data() { return { year: "", month: "", date: [], now: "", first: dayjs(this.value).format("YYYY-MM") } }, methods: { render() { this.date.length = 0; this.year = dayjs(this.first).year(); this.month = dayjs(this.first).month() + 1; this.now = dayjs().format("YYYY-MM-DD"); let days = [...new Array(dayjs(this.first).daysInMonth()).keys()].map(i => { let n = i + 1; let text = n < 10 ? "0" + n : n; let date = `${this.first}-${text}`; let now = !!(dayjs(date).diff(this.now, "day") === 0); let color = ""; let obj = this.rows.find(item => dayjs(date).diff(item.date, "day") === 0); if (obj) { color = obj.color } return { text, date, color, now, } }) let week = dayjs(`${this.year}-${this.month}-1`).day(); this.date = [...new Array(week ? (week - 1) : 6).fill(null), ...days] }, // ... }}
首先,我们定义一个 first
变量,表示需要展示的年月,因为要变成日历,肯定日期要对应周几,这样我们通过 dayjs(this.first).daysInMonth()
方法获取当前传入月份的天数,然后进行遍历,把 rows
传入的标记色都给填充上。再通过得知算出这个月的第一天是周几,然后在前面就空出多少个数据来生成出 date
。
{{item.now?"今日":item.text}}
当然,通过观察,每行始终是7个等大的格子,所以样式方面我们大可以使用 grid布局
,可以十分快速的实现效果 。
.m-calendar-month__days { display: grid; grid-template-columns: repeat(7, 1fr);}
监听更新
当修改当前日期时,或者标记数据时都要求重新渲染日历,此时用 watch
就可以轻松实现。
watch: { first(v) { this.render() this.$emit("change", { year: this.year, month: this.month, }) }, rows(v) { this.render() }}
别忘了,我们还要定义两个事件给开发者使用,在 first
改变是会发出来一个 change事件
,表示当前日历的年月,发生了改变发出通知。此时接受到通知,你可以从后端走接口重新获取新值或者完成其他的业务逻辑。而另一个是 select事件
来完成点击某个日期,发出的响应,在上个步骤的遍历阶段可以看出。
使用测试
<script>export default { data() { return { value:"2022-05", // 初始化显示的月份 range: ["2021-05", ""], // 时间范围 rows: [{ // 特殊日期标注数据,当前日期和标注颜色 date: "2022-5-21", color: "#5F8BFB" }, { date: "2022-5-24", color: "#FBA75F" }, { date: "2022-5-26", color: "#FBA75F" }], // ... } }, methods: { // 切换日历时触发 changeDate(e){ console.log(e) }, // 点击日期返回当前日期对象 selectDate(e){ console.log(e) } } //...}</script>
日历的大小可能受外界容器的影响,所以,给他加一个100%的宽,此时,我们可以看到,他浏览器和微信小程序的表现是基本一致的。
发布
编辑readme
发布之前我们当然需要在里面的 readme.md文件写写你开发这款软件是什么?怎么用?这些至少说明白,不然别人过段时间自己都忘了怎么用了,方便别人也方便自己吧。
执行发布
最后我们在 uni_modules的文件夹中,找的我们刚刚写的 ml-calendar,在这个文件夹上点击右键选择 发布到插件市场(此前,必须要在Dcloud注册为开发者并且实名认证)。
此时,会填写一些关于这款插件的信息:
当然,里面会涉及到这款插件的兼容情况的填写,至于到底兼不兼容各端,收不收费根据情况去选择吧。
当点击提交后,就会执行发布指令了。
此时,如果控制台会有发布后的返回信息:
如果成功则会返回一个插件地址链接,点开链接:
本文转载于:
https://www.gxlsystem.com/qianduan-2337714.html
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
热讯:记录--手把手带你开发一个uni-app日历插件(并发布)
OPPO Find N成为全国销量第二折叠屏!一经发布就大获成功
微速讯:首次使用钛合金螺丝!OPPO Find N2仅233g:折叠屏比iPhone还轻
OPPO Find N2内外一致好屏:双120Hz+双E6 可自由悬停
让玩家心动的定制 ROG 6游戏手机《暗黑破坏神:不朽》典藏限量版图赏
OPPO Find N2 233g比直板机还轻!央视点赞:刷新折叠屏手机新纪录
【世界速看料】LeetCode HOT 100:旋转图像
环球头条:特斯拉中国上线490元酒杯 限量卖 网友吐槽智商税
世界今日讯!女子连吃5天感冒药 多脏器功能衰竭:专家提醒小心这些症状
IT工程师哪里工资最高?美国仅排第二 第一收入超过70万
天天看热讯:帧数暴涨40%!《巫师3》次时代版画质优化指南
20万级大杀器 长安深蓝首款SUV曝光:增程、纯电全都有
【天天速看料】Shell 标准输入和输出
信息:公司新来一个同事,把网关系统设计的炉火纯青!(万能通用,稳的一批。。)
当前视讯!易基因|NSUN2介导RNA m5C修饰促进食管鳞状细胞癌进展的表观调控机制 | 肿瘤研究
ThingsBoard前端项目的安装与启动
【时快讯】RELIC库学习
全球看热讯:喜讯+1!袋鼠云数栈技术团队获“2022年度优秀开源技术团队”
投影仪的工作原理是什么?投影仪排名前十的品牌
Centos安装Nginx
针孔无线摄像机怎么连接?针孔无线摄像机怎么用?
本地连接受限制或无连接是怎么回事?本地连接受限制或无连接怎么解决?
svchost.exe占用cpu过是什么原因?svchost.exe占用cpu过高解决方法
pdf文件打开是乱码怎么回事?pdf文件打开是乱码时该怎么办?
男主角是明星的小说有哪些?男主角是明星的小说推荐
科比最后一场比赛是什么时候?科比最后一场比赛是多少分?
鞋子防臭的小妙招有哪些?鞋子防臭喷雾哪个牌子好?
沙棘如何鉴别好坏?沙棘的功效作用与主治是什么?
玉碎了代表什么征兆?玉碎了有什么办法修复吗?
英雄联盟更新慢是什么原因?英雄联盟更新慢怎么办?
怎么才能加快迅雷的下载速度?加快迅雷下载速度的方法有哪些?
全球讯息:阻止Windows未知应用弹窗的一种思路方法
Zabbix6.0使用教程 (四)—zabbix6.0从源代码安装
Tomcat工作原理
小键盘指法是什么意思?小键盘指法包括什么键?
iphone13如何添加公交卡?iphone13添加公交卡的方法有哪些?
安卓系统的手机有哪些?安卓系统的手机有哪些牌子好?
天天快讯:针对某钓鱼网站的渗透测试
【脚本项目源码】Python制作桌面宠物,这么可爱的萌宠你不想拥有吗?
今日热议:4999元 小米13限量定制色明天首销:只有5万台
环球焦点!中国民营火箭朱雀二号发射失利 全球首型轨道飞行的甲烷火箭
当前播报:QQ邮箱推实用新功能:英文文档一键即可翻译
【报资讯】丰田凯美瑞看呆!新一代本田雅阁实车曝光:比思域还运动
撞到快报废!特斯拉高速追尾大货车 司机身亡:现场视频速度快到可怕
单手就能用的折叠屏旗舰!OPPO Find N2今天发布:比直板机还轻
环球视讯!反对无效!日本投放广告宣传福岛核污水安全性:必须排海
【环球播资讯】我国成功发射遥感三十六号卫星!长征火箭年发射数首次迈上50大关
【环球速看料】适合男女双打 这三款游戏拉近你和她的距离
焦点滚动:腾讯互动阅读App《一零零一》宣布将停运:补偿方案出炉
环球新动态:显卡不会便宜了?NV要发新RTX 4080、4090:移动版也万元节奏
世界新消息丨法国2-0摩洛哥 决赛战阿根廷!网友发现规律:姆巴佩进球就不会输
快消息!Vue核心概念与其指令
Wireshark使用笔记
焦点!Zabbix监控系统
世界快资讯丨Kubernetes Volumes 笔记
取代奔腾/赛扬!Intel 12代Alder Lake-N处理器来了:清一色小核、超低功耗
环球即时看!德国樱桃收购瑞典外设品牌Xtrfy:对方只有12人
当前信息:国六B汽油要全面上线了!听说这玩意又贵又不耐烧?
环球关注:Wi-Fi 7:明年下半年见
天天看点:App流畅度提升88%!小米承诺:所有升级MIUI 14机型均支持光子引擎
全球要闻:雷军:全面对标苹果iPhone 一个新的小米开始了
环球滚动:[WPF] MediaElement播放HDR视频泛黄、颜色显示不正确应该如何解决?
R数据分析:冲击流图与热图的做法以及多图布局
简讯:VUE简介
天天微头条丨意外之喜:苹果给iPhone 6s/7推送iOS 15.7.2系统更新
焦点精选!脱口秀演员直播带货:想得美好
直播:今年最后一场大型流星雨来了!双子座流星雨压轴登场
游戏性能被RX7900反超?《巫师3》次世代版4090光追演示
天天信息:摩托罗拉×潘通 “非凡洋红”限定版新机来了
Python3.7.3环境搭建
全球观点:哈希表总结
当前报道:2022 ICPC 杭州站 K - Master of Both // Trie
RTX 4080为何要定价这般高?背后原因揭开
【环球热闻】面对矿卡 老黄已经悄悄带头冲锋了!一箭双雕 真是绝了
环球短讯!旧版微博拜拜:大量用户被直接改为新版界面
全球新动态:工信部出手!手机预装App终于能卸载了:2023年执行
切勿模仿!男子让幼儿握方向盘开车还拍摄炫耀:扣3分、罚200
4G已够用 美国运营商推5G陷入麻烦:4200亿投资难赚回来
全球简讯:Intel Arc显卡驱动升级:吃鸡快了4%、还有16个Bug
百事通!玩家最担心的事要发生!AMD RX 7900系列大概率涨价
天天微资讯!CDPR确认《巫师3》次世代版存在Bug:将尽快修复
高玩一步到位 阿斯加特32GB DDR5-6800 RGB灯条1350元
精选!浅析JWT Attack
记录--uniapp 应用APP跳转微信小程序
天天滚动:用 ChatGPT 来完成笔试题
MYSQL 3 DAY
世界热点评!第一百一十三篇: JS数组Array(二)数组方法 栈、队列、排序
世界快资讯丨《流浪地球2》公布星尘海报:人类的勇气永刻星空
全球快播:原因不服不行 大巴黎官方:我们已锁定世界杯冠军!梅西/姆巴佩争金靴
世界热讯:《死侍3》确认为R级!休·杰克曼将回归饰演金刚狼
环球快报:奇瑞SUV颜值天花板!俄罗斯花滑“千金”喜提OMODA C5:定制车身
微头条丨工资加倍都招不到人!官方要求北京快递业人员应返岗尽返岗
环球时讯:行业方案 | 新规落地,企业集团财务公司如何构建数智财务体系?
环球实时:模板层之标签 自定义模板语法 模板的继承与导入 搭建测试环境 ORM常用关键字
最强护眼屏!moto X40蓝光占比远低于行业均值
当前速看:为了让人多下游戏?特斯拉推出1TB车规级固态硬盘
世界实时:奥迪新车开了半小时咚咚响 4S店换零件车主想换车
当前看点!5年研发投入1000亿!小米发布首部知识产权白皮书:授权专利超2.9万项
每日速读!Redmi K60要用上陶瓷/素皮了?卢伟冰在线征集偏好:陶瓷第一
微头条丨Prometheus技术分享——如何监控宿主机和容器