动手写插件之日历插件jagus

前言:最近想练习一下JS的API,经过再三思考,自认为用原生JS写UI组件是一个好方法,理由有:

a. 熟悉大量原生API,像什么字符串,数组,DOM操作是肯定跑不了的

b. 可以锻炼逻辑思维能力。插件的需要基本一样,要实现什么功能不用自己太多考虑可以把主要精力放在功能实现上面,即代码层面的分析和解决问题能力

c. 可以加强自己的信心。写组件就是对自己前端能力的综合锻炼,涉及的知识面会很广。

一: 日历组件需求(要实现的功能)

b. 某年某月的日期能正常显示(某月有多少天,某一天是星期几)

c. 上一月,下一月切换功能

d. 假日提示功能,能自定义节假日

最近效果如下图:

二:问题拆分及解决过程

问题a: 界面构建问题

解决办法:通过分析windows任务栏日历,发现其界面就是一个 7*6 的固定的格子块。像这样较多数据展示当然用table了。然后thead里面的th来展示星期,caption来展示当前年月。考虑到每天有选中,hover等效果所以在td里面多使用了a标签(根据经验,是不推荐直接使用td裸标签,因为td的display属性是table-cell,其样式控制不够好)

问题b: 参数设计

解决办法:因为以前写过一些基于jQuery的插件,所以参数上也使用了jQuery插件常用的默认加自定义的方式.因为没有使用JS库,所以在Canlendar上面挂了一些工具方法.

问题c:如果正确显示每一个月的天数,即某月有多少天,某一天是星期几.

解决办法:通过分析发现:

1.  1个月最多有31天,而我们有7*6=42个格子(最多能显示42天),所以只需要找到一个合适的开始位置"把把每月天数(从1连续的超过31的整数)放入格式即可.

2.  上面所提到的"合适的开始位置"即把当前月的1号与星期给对应上

3.  做一些恰当优化,因为研究windows日历会发现,如果某月1号是星期天,那么"合适的开始位置"其实是第二行的第一个位置,而不是第一行的第一个位置

通过上面分析,我们发现多出了两个要解决的问题:

1. 某年某月有多少天;

2. 某月的1号是星期几

问题解决代码如下:

问题d: 如果实现自定义节日

解决办法: 对Canlendar类(型)增一个域:festival,这个域的产生会取默认与自定义节日的一个并集,是一个对象数组.在每渲染日历后,会根据此数组对td里面的a标签加一个date-festival的自定义属性,然后使用a::after伪元素来显示此属性

问题e:其它

1. 每个Canlendar对象有一个_canlendar属性,包含了四个属性.始终根据此对象去计算并渲染日历

3. 在放多API设计上采用了jQuery的思想,把setter,getter合到一个API上面,只有一个参数是getter,两个参数是setter.如前面提供的month()方法

THE END
0.2023年4月1日农历是多少号是星期几日子好吗是星期几? 今天农历是:2023年闰二月十一,今天是星期六,是2023年第14周,是今年的第91天。 2023年4月1日是什么日子?是吉日吗 今天是,是黑道日 前一天后一天 2023年4月1日老黄历 公历:2023年4月1日 星期六 农历:2023年闰二月十一 岁次:癸卯年 乙卯月 己丑日jvzquC41o0nonrfplkg/ew4hgpmtj~4424914;7186>:67mvon
1.2016年愚人节星期几导语:愚人节(April Fool's Day或All Fools' Day)也称万愚节、幽默节,愚人节节期为公历4月1日,但是,大家对2016年愚人节星期几,可能不是很清楚,对此,关于2016年愚人节星期几,现在就与小编一起来看看吧。 2016年愚人节星期几 2016年4月1日 星期五 农历 二月廿四 愚人节 愚人节的起源 1582年,法国国王查理jvzquC41o0xjnr3eqo4dp8ot/|z0{~wgplof1<;3;54ivvq
2.2020年1四月1日是星期几【2020年1四月1日是星期几】2020年4月1日是星期三。这个日期在历史上曾因“愚人节”而备受关注,但具体是星期几,可以通过多种方式验证。为jvzquC41ycv/lrszwp4de8kzwt0497733549A75264ivvq
3.七夕2023年几月几号情人节七夕2023年是哪一天七夕节马上就要到啦,一些小伙伴还不知道七夕是2023年哪一天、星期几,下面就让小编来带大家了解一下,感兴趣的小伙伴一起往下看看吧。 七夕2023年几月几号情人节 1、七夕时间 七夕节,又称七巧节、七姐节、女儿节、乞巧节、七娘会、七夕祭、牛公牛婆日、巧夕等,是中国民间的传统节日。农历时间是七月初七,2023年jvzquC41crv/cun4354og}4okr5hn86348<937mvon
4.七年级英语复习句子(共3篇)3.在2016年的一月二号14.演讲比赛 15.校郊游 4.在星期一16.英语晚会 5.在周末17.篮球比赛 6.在十二月18.校庆 7.在2016年19.艺术节、音乐节 8.日期20.戴卫的生日晚会 9.星期几21.一年的第三个月 10.多大22.一周的第一天 11.……岁23.十二个月 jvzquC41yy}/qq6220ipo8f142772@468::73>7326:/j}rn
5.妇女节是母亲节吗?2022年38妇女节是星期几?妇女节是母亲节吗?2022年38妇女节是星期几?农历二月有著名的花朝节,花朝节简称花朝,是百花的生日。因此农历二月又叫花月。关注华易网 2022年农历二月 专题,了解更多农历二月jvzquC41o0q48?3eqo5skun136875<3jvor
6.愚人节前一天是星期几,一天官方阅读愚人节前一天是星期几,一天官方阅读,三个女孩的青春与蜕变,以及在生活中碰撞出的奇妙温暖。这个城市很大,我们虽然互不相识,但也许我们曾经在路上擦身而过。也许我们爱看同一本书,爱听同一首歌,也许我们会谈保质期只有一天的恋爱。但这一天,我们却看到了真实的彼此,并jvzquC41yy}/m~fkmctncwmwc0ipo8vwgt21?6:28<
7.译林版小学英语六年级上册单元知识点6AUnit1unit8【引申】April Fool’s Day愚人节(每年的四月一日)。May/mei/ n. 五月 June n. 六月(略写为Jun.) July n. 七月(略写为Jul.) August n. 八月(略写为Aug.) September n. 九月(略写为Sept.) October n. 十月(略写为Oct.) November n. 十一月(略写为Nov.) December n. 十二月(略写为Dec.) jvzquC41o0972mteu0tfv8iqe1i43;=86;820qyon