jQuery的插件许多,应用的场景也很丰富,今天我这里给大家介绍一款很有用的日历页面开发插件 - fullcalendar,眼下最新版本号是1.5.1,使用这款插件可以高速帮助你高速编程实现基于web的日历查看功能,大家可能都使用过outlook的日历项功能,使用日历界面能更方便的查看待办事项或者约会。开发过程高速方便。插件首页的文档也很全。当然眼下仅仅有英文文档。不错插件支持多语言,这个很不错。

在过去web程序开发中,我以前使用这个插件开发了公司内部的会议室预定系统,这里我简单的介绍一下fullcalendar的相关开发,而且实例解说一下怎样使用这个插件开发日历,当中会使用到fullcalendar里相关的高级功能,比如,拖拽改动时间,生成个性化的会议室预定系统日历项内容。以上代码都是实际项目中使用的前台,大家假设须要能够直接改动使用。

项目需求:

1. 须要在fullcalendar的原有界面上美化,这里我们使用jQueryUI来实现界面美化,由于fullcalendar能够非常好的和jQueryUI无缝整合

2. 生成单独的日历项加入和查看功能,这里仍旧使用jQueryUI的dialog来实现

3. 由于是一个实际项目,须要数据验证,所以这里我们使用formVaildator插件实现

4. 加入一个 "转到某日"功能, 这个界面功能在Fullcalendar里没有,我们能够通过编程加入类似一个功能,当中调用了datepicker的一个addon,后面会介绍到

5. 周和日浏览能够自由的支持拖拽和移动,用来改动日期和时间

6. 浏览器支持: IE8和Firefox

jQuery相关插件:

1. fullcalendar

提供Calendar功能

2. formValidator

提供输入验证功能

3. Timepicker Addon for jQuery UI Datepicker

提供datepicker时间选择功能

开发代码:

导入相关jQuery插件类库,例如以下:

  1. <script type="text/javascript" src="js/jquery-ui-1.8.6.custom.min.js"></script>
  2.  
  3. <script type="text/javascript" src="js/jquery-ui-timepicker-addon.js"></script>
  4.  
  5. <link rel="stylesheet" href="css/redmond/jquery-ui-1.8.1.custom.css">
  6.  
  7. <!-- Jquery and Jquery UI -->
  8.  
  9. <script src="js/formValidator/js/jquery.validationEngine.js" type="text/javascript"></script>
  10.  
  11. <script src="js/formValidator/js/jquery.validationEngine-en.js" type="text/javascript"></script>
  12.  
  13. <link rel="stylesheet" href="js/formValidator/css/validationEngine.jquery.css" type="text/css" media="screen" charset="utf-8" />
  14.  
  15. <!-- FullCalender -->
  16.  
  17. <link rel='stylesheet' type='text/css' href="js/fullcal/css/fullcalendar.css" />
  18. <script type='text/javascript' src="js/fullcal/fullcalendar.js"></script>

生成日历主界面:

  1. $('#calendar').fullCalendar({
  2. header:{
  3. right: 'prev,next today',
  4. center: 'title',
  5. left: 'month,agendaWeek,agendaDay'
  6. },
  7. theme: true,
  8. editable: true,
  9. allDaySlot : false,
  10. events: function(start, end , callback){
  11. var events = [];
  12. ...
  13. callback(events);
  14. },
  15. ...

以上代码将在id=calendar的div里生成一个日历,当中theme定义使用jQueryUI来生成界面,events主要定义生成的会议室预定系统日历项目,这里我们使用例如以下代码生成日历项,在实际开发过程中,我们能够在这里调用后台程序,或者使用其他方法生成数据,这里为了简单演示,我们使用js来生成须要的日历项目,代码例如以下:

  1. var now = new Date();
  2. for(var i=-10;i<60;i++){
  3. var evtstart = new Date(now.getFullYear() , now.getMonth() , (now.getDate()-i), now.getHours()-5, now.getMinutes(), now.getSeconds(), now.getMilliseconds());
  4.  
  5. var evtend = new Date(now.getFullYear() , now.getMonth() , (now.getDate()-i), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
  6.  
  7. events.push({
  8. sid: 1,
  9. uid: 1,
  10. title: 'Daily Scrum meeting',
  11. start: evtstart,
  12. end: evtend,
  13. fullname: 'terry li',
  14. confname: 'Meeting 1',
  15. confshortname: 'M1',
  16. confcolor: '#ff3f3f',
  17. confid: 'test1',
  18. allDay: false,
  19. topic: 'Daily Scrum meeting',
  20. description : 'Daily Scrum meeting',
  21. id: 1,
  22. });
  23. }

以上代码将生成一些日历项目,显示在日历中。

  1. $('#calendar').fullCalendar({
  2. ...
  3. ...
  4. dayClick: function(date, allDay, jsEvent, view) { // 定义了点击日历中日期格子的动作,这里将会调用jQueryUi的dialog生成创建新日历项的对话框
  5. ...
  6. },
  7. eventClick: function(event) { // 定义了点击日历项的动作,这里将会调用jQueryUi的dialog显示日历项的内容
  8. },
  9. ...

接下来是fullcalendar的几个方法,用来设置会议室预定系统日历项的显示,各自是eventRender, eventAfterRender,这里几个方法能够用来生成日历项的内容,详细例如以下:

  1. eventRender: function(event, element) {
  2. var fstart = $.fullCalendar.formatDate(event.start, "HH:mm");
  3. var fend = $.fullCalendar.formatDate(event.end, "HH:mm");
  4. // Bug in IE8
  5. //element.html('<a href=#>' + fstart + "-" + fend + '<div style=color:#E5E5E5>' + event.title + "</div></a>");
  6. },
  7. eventAfterRender : function(event, element, view) {
  8. var fstart = $.fullCalendar.formatDate(event.start, "HH:mm");
  9. var fend = $.fullCalendar.formatDate(event.end, "HH:mm");
  10. //element.html('<a href=#><div>Time: ' + fstart + "-" + fend + '</div><div>Room:' + event.confname + '</div><div style=color:#E5E5E5>Host:' + event.fullname + "</div></a>");
  11. var confbg='';
  12. if(event.confid==1){
  13. confbg = confbg + '<span class="fc-event-bg"></span>';
  14. }else if(event.confid==2){
  15. confbg = confbg + '<span class="fc-event-bg"></span>';
  16. }else if(event.confid==3){
  17. confbg = confbg + '<span class="fc-event-bg"></span>';
  18. }else if(event.confid==4){
  19. confbg = confbg + '<span class="fc-event-bg"></span>';
  20. }else if(event.confid==5){
  21. confbg = confbg + '<span class="fc-event-bg"></span>';
  22. }else if(event.confid==6){
  23. confbg = confbg + '<span class="fc-event-bg"></span>';
  24. }else{
  25. confbg = confbg + '<span class="fc-event-bg"></span>';
  26. }
  27. var titlebg = '<span class="fc-event-conf" style="background:'+ event.confcolor +'">' + event.confshortname + '</span>';
  28. if(event.repweeks>0){
  29. titlebg = titlebg + '<span class="fc-event-conf" style="background:#fff;top:0;right:15;color:#3974BC;font-weight:bold">R</span>';
  30. }
  31. if(view.name=="month"){
  32. var evtcontent = '<div class="fc-event-vert"><a>';
  33. evtcontent = evtcontent + confbg;
  34. evtcontent = evtcontent + '<span class="fc-event-titlebg">' + fstart + " - " + fend + titlebg + '</span>';
  35. evtcontent = evtcontent + '<span>Room: ' + event.confname + '</span>';
  36. evtcontent = evtcontent + '<span>Host: ' + event.fullname + '</span>';
  37. evtcontent = evtcontent + '</a><div class="ui-resizable-handle ui-resizable-e"></div></div>';
  38. element.html(evtcontent);
  39. }else if(view.name=="agendaWeek"){
  40. var evtcontent = '<a>';
  41. evtcontent = evtcontent + confbg;
  42. evtcontent = evtcontent + '<span class="fc-event-time">' + fstart + "-" + fend + titlebg + '</span>';
  43. evtcontent = evtcontent + '<span>' + event.confname + ' by ' + event.fullname + '</span>';
  44. //evtcontent = evtcontent + '<span>' + event.fullname + '</span>';
  45. evtcontent = evtcontent + '</a><span class="ui-icon ui-icon-arrowthick-2-n-s"><div class="ui-resizable-handle ui-resizable-s"></div></span>';
  46. element.html(evtcontent);
  47. }else if(view.name=="agendaDay"){
  48. var evtcontent = '<a>';
  49. evtcontent = evtcontent + confbg;
  50. evtcontent = evtcontent + '<span class="fc-event-time">' + fstart + " - " + fend + titlebg + '</span>';
  51. evtcontent = evtcontent + '<span>Room: ' + event.confname + '</span>';
  52. evtcontent = evtcontent + '<span>Host: ' + event.fullname + '</span>';
  53. evtcontent = evtcontent + '<span>Topic: ' + event.topic + '</span>';
  54. evtcontent = evtcontent + '</a><span class="ui-icon ui-icon-arrow-2-n-s"><div class="ui-resizable-handle ui-resizable-s"></div></span>';
  55. element.html(evtcontent);
  56. }
  57. },

以上定义了相关会议室预定系统日历项显示方式, 以下介绍会议室预定系统日历项拖动和调整大小,代码片段例如以下:

  1. eventDragStart: function( event, jsEvent, ui, view ) {
  2. ui.helper.draggable("option", "revert", true);
  3. },
  4. eventDragStop: function( event, jsEvent, ui, view ) {
  5. },
  6. eventDrop: function( event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view ) {
  7. if(1==1||2==event.uid){
  8. var schdata = {startdate:event.start, enddate:event.end, confid:event.confid, sid:event.sid};
  9. identityService.getToBeUpdatedConflictedScheduleDAO(schdata , {
  10. callback:function(data) {
  11. if(data.length== 0){
  12. var newschdata = {sid:event.sid, startdate:event.start, enddate:event.end};
  13. identityService.updateScheduleByNewDateRange(newschdata, {
  14. callback:function(data) {
  15. alert("Thanks, reservation rescheduled successfully.");
  16. //window.location.reload();
  17. }
  18. });
  19. }else{
  20. revertFunc();
  21. alert("Sorry, reservation cannot be rescheduled.");
  22. }
  23. }
  24. });
  25. }else{
  26. revertFunc();
  27. }
  28. },
  29. eventResizeStart: function( event, jsEvent, ui, view ) {
  30. },
  31. eventResize: function(event,dayDelta,minuteDelta,revertFunc) {
  32. if(1==1||2==event.uid){
  33. var schdata = {startdate:event.start, enddate:event.end, confid:event.confid, sid:event.sid};
  34. }else{
  35. revertFunc();
  36. }
  37. }
  38.  
  39. });

以上代码假设须要具体说明,请大家參考官方文档,代码细节这里不再说明。 大家能够使用以下的演示代码执行一下。Fullcalendar是一个很有用的日历插件,使用得当能够开发很复杂的功能。比如,我们这里开发的会议室预定系统。强烈推荐!

jQuery插件实战之fullcalendar(日历插件)Demo的更多相关文章

  1. fullcalendar日历插件的使用并动态增删改查

    我上个项目是做了一个关于教育方面的web端页面,其中的课程表就要用到fullcalendar日历插件,刚开始也是不会用,因为以前也没用过,后面也是看官方文档,问同事,最后完成了这个课程表,个人感觉fu ...

  2. php使用fullcalendar日历插件

    最近做课程表的项目,找了好多个插件感觉都不好用,无意间看到了fullcalendar,还挺简单的,很方便,先贴一张项目页面 <!DOCTYPE html> <html> < ...

  3. jquery双日历日期选择器bootstrap-daterangepicker日历插件

    这个插件既可以作为双日历也可以作为单日历插件(jquery的插件在jquery插件库中http://www.jq22.com/下载很方便,在CSDN下载真麻烦) 引用 <meta http-eq ...

  4. 【UI插件】简单的日历插件(下)—— 学习MVC思想

    前言 我们上次写了一个简单的日历插件,但是只是一个半成品,而且做完后发现一些问题,于是我们今天尝试来解决这些问题 PS:距离上次貌似很久了 上次,我们大概遇到哪些问题呢: ① 既然想做一套UI库,那么 ...

  5. FullCalendar日历插件说明文档

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  6. FullCalendar 日历插件中文说明文档

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  7. FullCalendar日历插件(中文API)

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  8. FullCalendar日历插件说明文档(看到这篇手册,解决了困扰我3天的js问题)

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  9. fullcalendar 日历插件3.9.0 -- 基本插件使用

    以下主要结构,直接执行即可以使用 ,仅用参考: html: <!DOCTYPE html> <html> <head> <title>test</ ...

随机推荐

  1. TCP/IP协议的编写《转载》

    基于HHARM9-EDU的TCP/IP(UDP)协议的实现 原文网址:http://blog.csdn.net/lhj0503/article/details/3323788 摘 要:嵌入式技术的发展 ...

  2. ALV判断修改后是否有不合法数据,有则选中错误行,高亮度显示。

    alv数据表维护表时错误行需要高亮度显示 gt_index_rows TYPE lvc_t_row,"用以存放要选择行的内表 gs_index_rows TYPE lvc_s_row.&qu ...

  3. 辛星与您解读PHP页面跳转的几种实现方式

    因为页面跳转的使用是很频繁的,因此这里给出几种方式,事实上我想我并没有归纳全,毕竟函数那么多,要一下想起来还是特别麻烦的,于是,想到哪里就记到哪里把,等着以后再整理汇总. 第一种方式就是使用heade ...

  4. roll pitch yaw 的分别

    原文地址:http://blog.sina.com.cn/s/blog_452706120100scwu.html yaw,pitch,roll这三个旋转的确切意思.如果有一个人站在(0,0,0)点, ...

  5. Qt 向word中插入文字(使用QAxWidget和QAxObject)

    pro 文件中要加入 CONFIG += qaxcontainer 2. main.cpp #include <QApplication> #include <QAxWidget&g ...

  6. 系统变量file.encoding对Java的运行影响有多大?(转)good

    这个话题来自: Nutz的issue 361 在考虑这个issue时, 我一直倾向于使用系统变量file.encoding来改变JVM的默认编码. 今天,我想到, 这个系统变量,对JVM的影响到底有多 ...

  7. 高效 Java Web 开发框架 JessMA v3.2.3 beta-1 发布

    JessMA(原名:Portal-Basic)是一套功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hib ...

  8. Installing SSL on CentOS | My Virtual Time Capsule

    Installing SSL on CentOS | My Virtual Time Capsule Installing SSL on CentOS Extracted from the Sourc ...

  9. 查看mysql数据库表大小和最后修改时间

    查看mysql数据库表相关信息如表大小.修改更新等信息,可以通过以下方式: 一   show table status like ’table_name‘ ; 二 在infortmation_sche ...

  10. 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_2_建立开发环境

    本文对应书本5.1.3的内容 书本中通过CVS下载的源码 但是笔者实践的时候发现无法下载...地址已经失效了(也许是笔者的失误输错地址所致) 可以用git下载 地址是: http://git.ecli ...