一款灵活性很强的日历代码
日期:2010年04月19日作者:kos
来自分类:JAVASCRIPT查看:(274)评论:(2)

  工作之余,因个人对js的爱好,写了一款日历,综合了以往工作中遇到的与日历选择相关的很多功能。由于个人技能欠缺,可能会有一些地方处理得不够好,有意一起研究者可以与本人联系,把这个日历做得更好,声明一下:此日历着重点在功能上,而不在特殊效果上,为了让此代码更为简洁,代码量更小,无须加任务特效。
  下面做点简单的介绍:

 

一、日历目录存放
  |– [Calendar]
    |– [style]
      |– [blue]
        |– [images]
        |– Calendarstyle.css
      |–[demo]
        |– [images]
        |– Calendarstyle.css
    |– Calendar.js
    |– Calendarcov.css

 

注意:1、调用js时在<head>区域引用Calendar/Calendar.js和Calendarcov.css即可。
   2、记住要把images同时放到相应的文件夹下面

 

二、日历皮肤更换
  支持自定义皮肤,本日历已给出两套模版,自己制作皮肤时可以对照demo.html模版中的class进行制作
  制作好的皮肤存放目录要注意,自定义一个皮肤文件夹(如已有的[demo])放到[style]文件夹里面,然后把你要用到的图片放到你的皮肤文件夹里面的[images]文件夹里面,css样式文件命名为Calendarstyle.css与[images]文件夹同级。

  css样式说明:
  #calendarCov .calenCovbody:弹出层的总体框架样式,主要设置主题背景颜色
  #calendarCov .calenCov:弹出层的总体框架样式,设置头部边框
  #calendarCov .calenTitle:顶部年月样式和总体背景图片样式
  #calendarCov a;#calendarCov td:通用样式
  #calendarCov th:周的单元格样式
  #calendarCov .calenHead:周所在行的样式:主要设置背景
  #calendarCov .calenYlast:上一年的按钮样式
  #calendarCov .calenMlast:上一月的按钮样式
  #calendarCov .calenYnext:下一年的按钮样式
  #calendarCov .calenMnext:下一月的按钮样式
  #calendarCov .calenBody:日历体的样式,主要设置层次感
  #calendarCov .calenBodyCov:日历体的样式,主要设置层次感和边框
  #calendarCov .calenday td:日期单元格样式
  #calendarCov .calenday td a:当月存在日期单元格样式
  #calendarCov .calenday td a:hover:当月存在日期单元格鼠标指向样式
  #calendarCov .calenday .weekend:日期单元格周末样式
  #calendarCov .calenday .weekday:日期单元格非周末样式
  #calendarCov .calenday .weeknull:空白日期单元格样式
  #calendarCov .calenday .current默认日期样式,主要设置边框和背景
  #calendarCov .calenday .current a默认日期样式,主要设置字体颜色
  #calendarCov .calenButton:日历下面部分三个按钮样式,主要设置与日历体间距
  #calendarCov .calenButton div:日历下面部分三个按钮样式,主要设置按钮背景#calendarCov .calenButton div a:日历下部分三个按钮样式,主要设置按钮字体
  calenSetnull:清空按钮样式
  calenSetoday:今天按钮样式
  calenClosefl:确定按钮样式

 

三、调用格式
  先举几个例子:

 

1、普通调用
  <input type=”text” onFocus=”showCalendarControl(this)” readonly=”">
  用onFocus方法调用是为了方便使用键盘获取焦点,showCalendarControl()是执行的方法,传递的this是当前对象,要把选择的日期返回给当前对象所以需要传递当前获取焦点的对象,readonly表明此控件为只读,用户不能手动输入,此日历为了方便使用,所以限制做得很少,同时为了不让用户手动输入不合法的日期格式,所以最好把控件设置成不能手动输入状态;

 

2、有样式的调用
  <input type=”text” onFocus=”showCalendarControl(this,’class:demo’)” readonly=”">
  demo就是你要调用的样式文件夹,注意格式’class:demo’,必须在demo前加是class:,然后用单引号引起来,并且与this用逗号隔开,并且要注意顺序:this参数放到前面,以后的每个方法传递参数时都是this放到最前面,其余的可以颠倒;

 

3、限定日期调用
  <input type=”text” onFocus=”showCalendarControl(this,’minDate:2010-01-01′)” readonly=”">
  minDate:2010-01-01的意思是设定当前对象选择的最小时间值是2010年01月01日,注意年月日要用‘-’号连接,若要设定最大值,则用maxDate:datevalue,这里的datevalue就是你想设定的日期值了。如果设定最大值或最小值为今天,则表达为showCalendarControl(this,’minDate:#today’)或showCalendarControl(this,’maxDate:#today’);

 

4、限定日期同时并有天数限定
  <input type=”text” onFocus=”showCalendarControl(this,’minDate:#today(d:20)’)” readonly=”">
  这里的minDate:#today(d:20)的意思是最小值比今天大20天,若要设定最小值比今天小20天则表达示为minDate:#today(d:-20),d表示设定的限定为天数,同理,年:y,月:m;

 

5、限定日期与其它控件日期做对比
  <input type=”text” id=”date1″ value=”2010-04-19″ onFocus=”showCalendarControl(this)” readonly=”">
  <input type=”text” onFocus=”showCalendarControl(this,’minDate:date1(d:20)’)” readonly=”">
  用法是第4个例子差不多,不同的是today前面加了个#,(即#today和date1的区别而已),同时两个日期还可以做想到限制,使得关系更为紧密;

 

6、同时限定最大值的最小值
  <input type=”text” onFocus=”showCalendarControl(this,’minDate:#today(d:-20))^maxDate:#today(d:(20)’)” readonly=”">
   ‘^’这个符号是用来连接最大值和最小值的,这里的minDate和maxDate限定可以互换位置,但不要忘了打‘^’这个符号,这句话的意思是选定的日期范围为从过去20天到未来20天内;

 

7、同时有日期限定也有样式控制
  <input type=”text” onFocus=”showCalendarControl(this,’minDate:#today’,'class:demo’)” readonly=”">
  这时传递的参数有三个,第一个是当前对象,第二个是日期的限定,大于等于今天,第三上是引用样式,注意this必须放到第一个参数,后面两个参数可以互换位置,即上面这个调用与<input type=”text” onFocus=”showCalendarControl(this,’class:demo’,'minDate:#today’)” readonly=”">对等,注意引用样式也要用引号引起来;

 

8、更多灵活的调用方法尽在你的不自不觉发现中,同时期待你的宝贵意见

 

 

四:声明
  1、此日历可能会出现一些异常情况,若要实际用此日历请多加调试,只是小弟反复测试暂时还没出现异常情况
  2、为尊重小弟劳动成果,转载请注明来源,同时方便因我更新后能得到最新文件
  3、此日历不含任务广告和恶意代码,若调试没有bug可以大胆使用
  4、为了让大家得到更详细的介绍,请通过博客留言和E-mail方式与本人联系,小弟会尽快给予回复。

 

相关下载:
  完整版附带调用实例下载:Koscalendar.rar
  演示地址:查看演示样例

网友评论:
共 2 条评论
  • 爱吾资源 -- 2010/04/29 09:46:22

    很好,很强大,目前我看得云里雾里的!

    kos - 2010/04/29 10:06:14

    要慢慢看,有时间静下来看一看,把思路搞通了就懂了!~

  •  姓名(必填)
     邮箱(必填,但不公开)
     个人主页