您现在的位置:首页 --> JavaScript --> js 面向对象日历实现原理详解
js 面向对象日历实现原理详解
浏览:1209次 出处信息
对于前端开发来说,日历空间在网站里应用的很多,比如:填写表单时,是选取一下事件了--等等。下面就来分析一下怎么用js来写一个自己万年历。
在没有开始之前,我们是先弄明白是什么原理,要通过几个步骤来实现。
第一,我们的知道某一个月的某第一天是星期几。
第二,我们得知道某一个月有一共有几天,
只要有了这两部就可以循环出来了,下面看一下代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://suiyidian.cn/texiao/tab/jquery-1.5.2.min.js" type="text/javascript"></script> <title>无标题文档</title> </head> <body> <div class="rili"> <div class="time_y_m_d" style="width: 100%; height: 35px; overflow: hidden; position:relative"> <div class="time_date">2014/6</div> <div class="m_dowmn">下一月</div> <div class="m_up">上一月</div> </div> <ul class="rili_h"><li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li></ul> <ul class="rili_z"></ul> </div> <style> .time_y_m_d div.time_date { height: 35px; line-height: 35px; margin: 0 auto; text-align: center; width: 61px; } .time_y_m_d{ font-size:12px; background:#FFF} .time_y_m_d div{ height:35px; line-height:35px; text-align:center;width: 61px; top:0px; cursor:pointer} .m_dowmn{ position:absolute; right:0px} .m_up{ position:absolute; left:0px} .time_y_m_d{ border-left:1px solid #ccc;border-top:1px solid #ccc;} .rili .rili_h li{ background:#e6e6e6} .rili li{list-style:none; float:left; border-left:1px solid #ccc; width:49px; height:49px; text-align:center; line-height:49px;border-top:1px solid #ccc; font-size:12px} .rili{ width:350px; height:auto; overflow:hidden; border-right:1px solid #ccc;border-bottom:1px solid #ccc;} .rili *,.rili{ padding:0px;margin:0} .rili{ margin:0px auto; background:#F5F5F5} </style> <script> var calendar={ nowMonth:null, nowYear:null, nowDate:null, getDates:function(M){//获取当前月有多少天 var D=new Date(); D.setMonth(M+1); D.setDate(0); return D.getDate() }, getMonthOne:function(M){//获取当前月第一天是星期几 var D=new Date(); var D2=new Date(D.getFullYear(),M,1) return D2.getDay() }, nowDate:function(){ var D=new Date(); calendar.nowMonth=D.getMonth(); calendar.nowYear=D.getFullYear(); calendar.nowDate=D.getDate(); $(".time_date").html(calendar.nowYear+"年/"+(calendar.nowMonth+1)) }, downM:function(){ if(calendar.nowMonth>=11){ alert("已经是最后一月了") }else{ calendar.nowMonth+=1; } $(".time_date").html(calendar.nowYear+"年/"+(calendar.nowMonth+1)) calendar.initHtml(); }, upM:function(){ if(calendar.nowMonth<=0){ alert("已经是第一月了") }else{ calendar.nowMonth-=1; } $(".time_date").html(calendar.nowYear+"年/"+(calendar.nowMonth+1)) calendar.initHtml(); }, initHtml:function(){ var Da=new Date(); var dates=calendar.getDates(calendar.nowMonth) var day=calendar.getMonthOne(calendar.nowMonth) var zHtml=""; var d=0; if(day!=0){ for(p=0; p<day; p++){ zHtml+="<li></li>" } } for(i=0; i<dates; i++) { if(Da.getMonth()==calendar.nowMonth){ if(Da.getDate()==(i+1)){ zHtml+="<li style='background-color:green;color:#fff'>"+(i+1)+"</li>"; }else{ zHtml+="<li>"+(i+1)+"</li>"; } }else{ zHtml+="<li>"+(i+1)+"</li>"; } } $(".rili_z").html(zHtml) var dL=$(".rili_z li").length; var zLeng=42 if(dL!=zLeng){ for(k=0; k<(zLeng-dL); k++){ $(".rili_z").append("<li></li>") } } } } calendar.nowDate() calendar.initHtml() $(".m_dowmn").click(function(){ calendar.downM()}) $(".m_up").click(function(){ calendar.upM()}) </script> </body> </html>
是不是看起来很简单呢,这里可以结合你别的知识做出各式各样的日历风格
下面给一个演示地址:DEMO
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:基于jQuery的简易手风琴切换插件
后一篇:jQuery 设置复选框选中状态的 BUG >>
文章信息
- 作者:kevn 来源: web前端开发-kevn 记录web前端开发技术
- 标签: 日历
- 发布时间:2014-11-07 00:08:43
建议继续学习
近3天十大热文
- [71] IOS安全–浅谈关于IOS加固的几种方法
- [70] Twitter/微博客的学习摘要
- [65] 如何拿下简短的域名
- [64] android 开发入门
- [63] Go Reflect 性能
- [62] find命令的一点注意事项
- [60] 流程管理与用户研究
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录
- [58] Oracle MTS模式下 进程地址与会话信