zoukankan      html  css  js  c++  java
  • fullcalendar教程

    由于工作需要要开发一个日程管理,后面查询到fullcalendar是个不错jquery做的日程控件配合jquery-ui的时间选择控件,个人感觉还是不错的fullcalendar有丰富的配置满足了开发所需还有不错的用户体验,不多说上代码。

    第一步骤

    先把相关包引用

    <link href="../jquery/jquery-ui.css" rel="stylesheet" type="text/css" />
    <link href="css/mainstructure.css" rel="stylesheet" type="text/css" />
    <link href="css/maincontent.css" rel="stylesheet" type="text/css" />

    注:红色的是自己定义用来控制jquery-ui 弹框的样式等
    <link rel='stylesheet' type='text/css' href='cupertino/theme.css' />
    <link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
    <link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css'
    media='print' />
    <script src="../jquery/jquery-1.8.2.min.js" type="text/javascript"></script>
     
    <script src="../jquery/jquery-ui.min1.9.1.js" type="text/javascript"></script>
     
    <script src="http://www.cnblogs.com/jQuery-Timepicker-Addon-master/jquery-ui-timepicker-addon.js"></script>
    <script src="http://www.cnblogs.com/jQuery-Timepicker-Addon-master/jquery-ui-sliderAccess.js"></script>
    <script src="../jquery/datepicker-zh.js" type="text/javascript"></script>
    <link href="http://www.cnblogs.com/jQuery-Timepicker-Addon-master/jquery-ui-timepicker-addon.css"
    rel="stylesheet" />
     
    <script src="../fullcalendar/fullcalendar.js" type="text/javascript"></script>
     

      1 <script type='text/javascript'>
      2 
      3     $(document).ready(function () {
      4 
      5         //  $("#hid").timepicker();
      6         $("#start").timepicker({ dateFormat: 'yy-mm-dd', timeFormat: 'hh:mm', hourMin: 5, hourMax: 24, hourGrid: 3, minuteGrid: 15, timeText: '时间', hourText: '时', minuteText: '分', timeOnlyTitle: '选择时间', onClose: function (dateText, inst) {
      7             if ($('#start').val() != '') {
      8                 var testStartDate = $('#start').datetimepicker('getDate');
      9                 var testEndDate = $('#end').datetimepicker('getDate');
     10                 if (testStartDate > testEndDate)
     11                     $('#end').datetimepicker('setDate', testStartDate);
     12             } else {
     13                 $('#end').val(dateText);
     14             }
     15         },
     16             onSelect: function (selectedDateTime) {
     17                 $('#end').datetimepicker('option', 'minDate', $('#end').datetimepicker('getDate'));
     18             }
     19         });
     20         $("#end").datetimepicker({ dateFormat: 'yy-mm-dd', hourMin: 5, hourMax: 23, hourGrid: 3, minuteGrid: 15, timeText: '时间', hourText: '时', minuteText: '分', onClose: function (dateText, inst) {
     21             if ($('#start').val() != '') {
     22                 var testStartDate = $('#start').datetimepicker('getDate');
     23                 var testEndDate = $("#end").datetimepicker('getDate');
     24                 if (testStartDate > testEndDate)
     25                     $('#start').datetimepicker('setDate', testEndDate);
     26             } else {
     27                 $('#start').val(dateText);
     28             }
     29         },
     30             onSelect: function (selectedDateTime) {
     31                 $('#start').timepicker('option', 'maxDate', $("#end").timepicker('getDate'));
     32             }
     33         });
     34         $("#addhelper").hide();
     35 
     36         var date = new Date();
     37         var d = date.getDate();
     38         var m = date.getMonth();
     39         var y = date.getFullYear();
     40 
     41         $('#calendar').fullCalendar({
     42             theme: true,
     43             header: {
     44                 left: 'prev,next today',
     45                 center: 'title',
     46                 right: 'month,agendaWeek,agendaDay'
     47             },
     48          
     49             monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
     50             monthNamesShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
     51             dayNames: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
     52             dayNamesShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
     53             today: ["今天"],
     54             firstDay: 1,
     55             buttonText: {
     56                 today: '本月',
     57                 month: '月',
     58                 week: '周',
     59                 day: '日',
     60                 prev: '上一月',
     61                 next: '下一月'
     62             },
     63             viewDisplay: function (view) {//动态把数据查出,按照月份动态查询
     64                 var viewStart = $.fullCalendar.formatDate(view.start, "yyyy-MM-dd HH:mm:ss");
     65                 var viewEnd = $.fullCalendar.formatDate(view.end, "yyyy-MM-dd HH:mm:ss");
     66                 $("#calendar").fullCalendar('removeEvents');
     67                 $.post("http://www.cnblogs.com/sr/AccessDate.ashx", { start: viewStart, end: viewEnd }, function (data) {
     68             
     69                     var resultCollection = jQuery.parseJSON(data);
     70                     $.each(resultCollection, function (index, term) {
     71                         $("#calendar").fullCalendar('renderEvent', term, true);
     72                     });
     73 
     74                 }); //把从后台取出的数据进行封装以后在页面上以fullCalendar的方式进行显示
     75             },
     76             editable: true,//判断该日程能否拖动
     77             dayClick: function (date, allDay, jsEvent, view) {//日期点击后弹出的jq ui的框,添加日程记录
     78                 var selectdate = $.fullCalendar.formatDate(date, "yyyy-MM-dd");//选择当前日期的时间转换
     79                 $("#end").datetimepicker('setDate', selectdate);//给时间空间赋值
     80                 $("#reservebox").dialog({
     81                     autoOpen: false,
     82                     height: 450,
     83                      400,
     84                     title: 'Reserve meeting room on ' + selectdate,
     85                     modal: true,
     86                     position: "center",
     87                     draggable: false,
     88                     beforeClose: function (event, ui) {
     89                         //$.validationEngine.closePrompt("#meeting");
     90                         //$.validationEngine.closePrompt("#start");
     91                         //$.validationEngine.closePrompt("#end");
     92                     },
     93                     timeFormat: 'HH:mm{ - HH:mm}',
     94 
     95                     buttons: {
     96                         "close": function () {
     97                             $(this).dialog("close");
     98                         },
     99                         "reserve": function () {
    100 
    101                             var startdatestr = $("#start").val(); //开始时间
    102                             var enddatestr = $("#end").val(); //结束时间
    103                             var confid = $("#title").val(); //标题
    104                             var det = $("#details").val(); //内容 
    105                             var cd = $("#chengdu").val(); //重要程度 
    106                             var id2;
    107                             var startdate = $.fullCalendar.parseDate(selectdate + "T" + startdatestr);//时间和日期拼接
    108                             var enddate = $.fullCalendar.parseDate(enddatestr);
    109                             var schdata = { title: confid, fullname: confid, description: det, confname: cd, confshortname: 'M1', start: selectdate + ' ' + startdatestr, end: enddatestr };
    110                             $.ajax({
    111                                 type: "POST", //使用post方法访问后台
    112 
    113                                 url: "http://www.cnblogs.com/sr/getallid.ashx", //要访问的后台地址
    114                                 data: schdata, //要发送的数据
    115                                 success: function (data) {
    116                                     //对话框里面的数据提交完成,data为操作结果
    117                                     id2 = data;
    118                                     var schdata2 = { title: confid, fullname: confid, description: det, confname: cd, confshortname: 'M1', start: selectdate + ' ' + startdatestr, end: enddatestr, id: id2 };
    119                                     $('#calendar').fullCalendar('renderEvent', schdata2, true);
    120                                     $("#start").val(''); //开始时间
    121                                     $("#end").val(''); //结束时间
    122                                     $("#title").val(''); //标题
    123                                     $("#details").val(''); //内容 
    124                                     $("#chengdu").val(''); //重要程度 
    125 
    126                                 }
    127                             });
    128 
    129 
    130                             $(this).dialog("close");
    131 
    132 
    133                         }
    134 
    135                     }
    136                 });
    137                 $("#reservebox").dialog("open");
    138                 return false;
    139             },
    140      
    141             loading: function (bool) {
    142                 if (bool) $('#loading').show();
    143                 else $('#loading').hide();
    144             },
    145             eventAfterRender: function (event, element, view) {//数据绑定上去后添加相应信息在页面上
    146                 var fstart = $.fullCalendar.formatDate(event.start, "HH:mm");
    147                 var fend = $.fullCalendar.formatDate(event.end, "HH:mm");
    148                
    150 
    151                 var confbg = '';
    152                 if (event.confid == 1) {
    153                     confbg = confbg + '<span class="fc-event-bg"></span>';
    154                 } else if (event.confid == 2) {
    155                     confbg = confbg + '<span class="fc-event-bg"></span>';
    156                 } else if (event.confid == 3) {
    157                     confbg = confbg + '<span class="fc-event-bg"></span>';
    158                 } else if (event.confid == 4) {
    159                     confbg = confbg + '<span class="fc-event-bg"></span>';
    160                 } else if (event.confid == 5) {
    161                     confbg = confbg + '<span class="fc-event-bg"></span>';
    162                 } else if (event.confid == 6) {
    163                     confbg = confbg + '<span class="fc-event-bg"></span>';
    164                 } else {
    165                     confbg = confbg + '<span class="fc-event-bg"></span>';
    166                 }
    167 
    168               //  var titlebg = '<span class="fc-event-conf" style="background:' + event.confcolor + '">' + event.confshortname + '</span>';
    169 
    170 //                if (event.repweeks > 0) {
    171 //                    titlebg = titlebg + '<span class="fc-event-conf" style="background:#fff;top:0;right:15;color:#3974BC;font-weight:bold">R</span>';
    172 //                }
    173 
    174                 if (view.name == "month") {//按月份
    175                     var evtcontent = '<div class="fc-event-vert"><a>';
    176                     evtcontent = evtcontent + confbg;
    177                     evtcontent = evtcontent + '<span class="fc-event-titlebg">' + fstart + " - " + fend + event.fullname + '</span>';
    178 
    181                     element.html(evtcontent);
    182                 } else if (view.name == "agendaWeek") {//按周
    183                     var evtcontent = '<a>';
    184                     evtcontent = evtcontent + confbg;
    185                     evtcontent = evtcontent + '<span class="fc-event-time">' + fstart + "-" + fend  + '</span>';
    186                     evtcontent = evtcontent + '<span>'+ event.fullname + '</span>';
    187     
    189                     element.html(evtcontent);
    190                 } else if (view.name == "agendaDay") {//按日
    191                     var evtcontent = '<a>';
    192                     evtcontent = evtcontent + confbg;
    193                     evtcontent = evtcontent + '<span class="fc-event-time">' + fstart + " - " + fend +  '</span>';
    194     //              evtcontent = evtcontent + '<span>Room: ' + event.confname + '</span>';
    195   //                evtcontent = evtcontent + '<span>Host: ' + event.fullname + '</span>';
    196 //                    evtcontent = evtcontent + '<span>Topic: ' + event.topic + '</span>';
    197                  // evtcontent = evtcontent + '</a><span class="ui-icon ui-icon-arrow-2-n-s"><div class="ui-resizable-handle ui-resizable-s"></div></span>';
    198                     element.html(evtcontent);
    199                 }
    200             },
    201             eventMouseover: function (calEvent, jsEvent, view) {
    202                 var fstart = $.fullCalendar.formatDate(calEvent.start, "yyyy/MM/dd HH:mm");
    203                 var fend = $.fullCalendar.formatDate(calEvent.end, "yyyy/MM/dd HH:mm");
    204                 $(this).attr('title', fstart + " - " + fend + " " + "标题" + " : " + calEvent.title);
    205                 $(this).css('font-weight', 'normal');
    206                 $(this).tooltip({
    207                     effect: 'toggle',
    208                     cancelDefault: true
    209                 });
    210             },
    211 
    212             eventClick: function (event) {
    213                 var fstart = $.fullCalendar.formatDate(event.start, "HH:mm");
    214                 var fend = $.fullCalendar.formatDate(event.end, "HH:mm");
    215                 //  var schdata = { sid: event.sid, deleted: 1, uid: event.uid };
    216                 var selectdate = $.fullCalendar.formatDate(event.start, "yyyy-MM-dd");
    217                 $("#start").val(fstart); ;
    218                 $("#end").datetimepicker('setDate', event.end);
    219 
    220 
    221                 $("#title").val(event.title); //标题
    222                 $("#details").val(event.description); //内容 
    223                 $("#chengdu").val(event.confname); //重要程度 
    224 
    225 
    226 
    227                 $("#reservebox").dialog({
    228                     autoOpen: false,
    229                     height: 450,
    230                      400,
    231                     title: 'Reserve meeting room on ',
    232                     modal: true,
    233                     position: "center",
    234                     draggable: false,
    235                     beforeClose: function (event, ui) {
    236                         //$.validationEngine.closePrompt("#meeting");
    237                         //$.validationEngine.closePrompt("#start");
    238                         //$.validationEngine.closePrompt("#end");
    239                         $("#start").val(''); //开始时间
    240                         $("#end").val(''); //结束时间
    241                         $("#title").val(''); //标题
    242                         $("#details").val(''); //内容 
    243                         $("#chengdu").val(''); //重要程度 
    244                     },
    245                     timeFormat: 'HH:mm{ - HH:mm}',
    246 
    247                     buttons: {
    248                         "删除": function () {
    249                             var aa = window.confirm("警告:确定要删除记录,删除后无法恢复!");
    250                             if (aa) {
    251                                 var para = { id: event.id };
    252 
    253 
    254                                 $.ajax({
    255                                     type: "POST", //使用post方法访问后台
    256 
    257                                     url: "http://www.cnblogs.com/sr/removedate.ashx", //要访问的后台地址
    258                                     data: para, //要发送的数据
    259                                     success: function (data) {
    260                                         //对话框里面的数据提交完成,data为操作结果
    261 
    262 
    263                                         $('#calendar').fullCalendar('removeEvents', event.id);
    264                                     }
    265 
    266 
    267                                 });
    268 
    269                             }
    270                             $(this).dialog("close");
    271                         },
    272                         "reserve": function () {
    273 
    274                             var startdatestr = $("#start").val(); //开始时间
    275                             var enddatestr = $("#end").val(); //结束时间
    276                             var confid = $("#title").val(); //标题
    277                             var det = $("#details").val(); //内容 
    278                             var cd = $("#chengdu").val(); //重要程度 
    279                             var startdate = $.fullCalendar.parseDate(selectdate + "T" + startdatestr);
    280                             var enddate = $.fullCalendar.parseDate(enddatestr);
    281 
    282                             event.fullname = confid;
    283                             event.confname = cd;
    284                             event.start = startdate;
    285                             event.end = enddate;
    286                             event.description = det;
    287                             var id2;
    288 
    289                             var schdata = { title: confid, fullname: confid, description: det, confname: cd, confshortname: 'M1', start: selectdate + ' ' + startdatestr, end: enddatestr, id: event.id };
    290                             $.ajax({
    291                                 type: "POST", //使用post方法访问后台
    292 
    293                                 url: "http://www.cnblogs.com/sr/Updateinfo.ashx", //要访问的后台地址
    294                                 data: schdata, //要发送的数据
    295                                 success: function (data) {
    296                                     //对话框里面的数据提交完成,data为操作结果
    297 
    298                                     var schdata2 = { title: confid, fullname: confid, description: det, confname: cd, confshortname: 'M1', start: selectdate + ' ' + startdatestr, end: enddatestr, id: event.id };
    299                                     $('#calendar').fullCalendar('updateEvent', event);
    300                                 }
    301                             });
    302 
    303 
    304 
    305 
    306 
    307                             $(this).dialog("close");
    308                         }
    309 
    310                     }
    311                 });
    312                 $("#reservebox").dialog("open");
    313                 return false;
    314             },
    315             //            events: "http://www.cnblogs.com/sr/AccessDate.ashx"
    316             events: []
    317         });
    318 
    319 
    320 
    321         //goto date function
    322         if ($.browser.msie) {
    323             $("#calendar .fc-header-right table td:eq(0)").before('<td><div class="ui-state-default ui-corner-left ui-corner-right" style="border-right:0px;padding:1px 3px 2px;" ><input type="text" id="selecteddate" size="10" style="padding:0px;"></div></td><td><div class="ui-state-default ui-corner-left ui-corner-right"><a><span id="selectdate" class="ui-icon ui-icon-search">goto</span></a></div></td><td><span class="fc-header-space"></span></td>');
    324         } else {
    325             $("#calendar .fc-header-right table td:eq(0)").before('<td><div class="ui-state-default ui-corner-left ui-corner-right" style="border-right:0px;padding:3px 2px 4px;" ><input type="text" id="selecteddate" size="10" style="padding:0px;"></div></td><td><div class="ui-state-default ui-corner-left ui-corner-right"><a><span id="selectdate" class="ui-icon ui-icon-search">goto</span></a></div></td><td><span class="fc-header-space"></span></td>');
    326         }
    327 
    328         $("#selecteddate").datepicker({
    329             dateFormat: 'yy-mm-dd',
    330             beforeShow: function (input, instant) {
    331                 setTimeout(
    332                             function () {
    333                                 $('#ui-datepicker-div').css("z-index", 15);
    334                             }, 100
    335                         );
    336             }
    337         });
    338 
    339 
    340 
    341         $("#selectdate").click(function () {
    342             var selectdstr = $("#selecteddate").val();
    343             var selectdate = $.fullCalendar.parseDate(selectdstr, "yyyy-mm-dd");
    344             $('#calendar').fullCalendar('gotoDate', selectdate.getFullYear(), selectdate.getMonth(), selectdate.getDate());
    345         });
    346 
    347 
    348         // conference function
    349         $("#calendar .fc-header-left table td:eq(0)").before('<td><div class="ui-state-default ui-corner-left ui-corner-right" id="selectmeeting"><a><span id="selectdate" class="ui-icon ui-icon-search" style="float: left;padding-left: 5px; padding-top:1px"></span>meeting room</a></div></td><td><span class="fc-header-space"></span></td>');
    350 
    351 
    352 
    353         //        $(".fc-button-prev").click(function () {
    354         //            alert("fasdf");
    355         //        });
    356 
    357     });
    358 
    359  
    360 
    361 </script>

    第3步加入一些必要的控制样式

    <style type='text/css'>
        .ui-datepicker
        {
            width: 23em;
            padding: .2em .2em 0;
            font-size: 70%;
            display: none;
        }
        
        #calendar
        {
            width: 900px;
            margin: 0 auto;
        }
        #loading
        {
            top: 0px;
            right: 0px;
        }
        
        .tooltip
        {
            padding-bottom: 25px;
            padding-left: 25px;
            width: 100px !important;
            padding-right: 25px;
            display: none;
            background: #999;
            height: 70px;
            color: red;
            font-size: 12px;
            padding-top: 25px;
            z-order: 10;
        }
        .ui-timepicker-div .ui-widget-header
        {
            margin-bottom: 8px;
        }
        .ui-timepicker-div dl
        {
            text-align: left;
        }
        .ui-timepicker-div dl dt
        {
            height: 25px;
            margin-bottom: -25px;
        }
        .ui-timepicker-div dl dd
        {
            margin: 0 10px 10px 65px;
        }
        .ui-timepicker-div td
        {
            font-size: 90%;
        }
        .ui-tpicker-grid-label
        {
            background: none;
            border: none;
            margin: 0;
            padding: 0;
        }
        .ui-timepicker-rtl
        {
            direction: rtl;
        }
        .ui-timepicker-rtl dl
        {
            text-align: right;
        }
        .ui-timepicker-rtl dl dd
        {
            margin: 0 65px 10px 10px;
        }
    </style>

    第4步 页面代码

        <div id="wrap">
            <div id='calendar'>
            </div>
            <div id="reserveinfo" title="Details">
                <div id="revtitle">
                </div>
                <div id="revdesc">
                </div>
            </div>
            <div style="display: none" id="reservebox" title="Reserve meeting room">
                <form id="reserveformID" method="post">
                <div class="sysdesc">
                    &nbsp;</div>
                <div class="rowElem">
                    <label>
                        标题:</label>
                    <input id="title" name="start">
                </div>
                <div class="rowElem">
                    <label>
                        重要程度:</label>
                    <input id="chengdu" name="start">
                </div>
                <div class="rowElem">
                    <label>
                        开始时间:</label>
                    <input id="start" name="start">
                </div>
                <div class="rowElem">
                    <label>
                        结束时间:</label>
                    <input id="end" name="end">
                </div>
                <div class="rowElem">
                    <label>
                        备忘内容:</label>
                    <textarea id="details" rows="3" cols="43" name="details"></textarea>
                </div>
                <div class="rowElem">
                </div>
                <div class="rowElem">
                </div>
                <div id="addhelper" class="ui-widget">
                    <div style="padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px"
                        class="ui-state-error ui-corner-all">
                        <div id="addresult">
                        </div>
                    </div>
                </div>
                </form>
            </div>
           
        </div>

    这里的代码我是http://www.gbin1.com/technology/jquery/devappwithfullcanlendar/index.html上面的,根据个人项目要求来修改了。下面是效果,如有其它问题可以发邮件给我t1o4m5@163.com,转载请说明,这是我原创


    很多博友发邮件问我要相应的例子:我现在放上来http://download.csdn.net/detail/t1o4m5/5265611 ,由于之前数据备份有问题重新发一个数据的备份文件http://download.csdn.net/detail/t1o4m5/5944269

    注意:试用备份 这个文件是sql数据库备份文件,剩下你懂的,然后运行的页面是在fullcalendar-1.5.4\demos文件夹下请注意。

  • 相关阅读:
    [JS Compose] 7. Ensure failsafe combination using monoids
    [Functional Programming] Monad
    [Algorithm] Count Negative Integers in Row/Column-Wise Sorted Matrix
    [React] Use the useReducer Hook and Dispatch Actions to Update State (useReducer, useMemo, useEffect)
    [Functional Programming] Pointy Functor Factory
    [Functional Programming] Async IO Functor
    [Functional Programming] Write simple Semigroups type
    [置顶] 阿里IOS面试题之多线程选用NSOperation or GCD
    JAVA实现字符串反转,借助字符数组实现
    菜鸟级SQL Server21天自学通(文档+视频)
  • 原文地址:https://www.cnblogs.com/xiaobaiczc/p/2867242.html
Copyright © 2011-2022 走看看