(以下是我学习FullCalendar控件时,网络上收集的一些资料)
jQuery.fullCalendar官方网址: http://arshaw.com/fullcalendar/
http://arshaw.com/fullcalendar/docs/
http://arshaw.com/fullcalendar/download/
第二部分(官方文档的翻译)
http://blog.csdn.net/lgg201/article/details/4818941
第三部分(视频教程)
http://www.verycd.com/topics/2782321/(一共两集)
第四部分(实战)
(自己做了一个日程管理)
主要的代码如下:
<script type='text/javascript'>
$(document).ready(function() {
artDialog.notice = function (options) {
var opt = options || {},
api, aConfig, hide, wrap, top,
duration = 800; var config = {
id: 'Notice',
left: '100%',
top: '100%',
fixed: true,
drag: false,
resize: false,
follow: null,
lock: false,
init: function(here){
api = this;
aConfig = api.config;
wrap = api.DOM.wrap;
top = parseInt(wrap[0].style.top);
hide = top + wrap[0].offsetHeight; wrap.css('top', hide + 'px')
.animate({top: top + 'px'}, duration, function () {
opt.init && opt.init.call(api, here);
});
},
close: function(here){
wrap.animate({top: hide + 'px'}, duration, function () {
opt.close && opt.close.call(this, here);
aConfig.close = $.noop;
api.close();
}); return false;
}
}; for (var i in opt) {
if (config[i] === undefined) config[i] = opt[i];
}; return artDialog(config);
};
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
theme: true,
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
//fullcalendar本地化
//timeFormat:{agenda: 'h:mm TT{ - h:mm TT}'}, //默认是{agenda: ‘h:mm{ - h:mm}}, 影响的是添加的具体的日程上显示的时间格式.
monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthNamesShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
dayNames: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
dayNamesShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
today: ["今天"],
firstDay: 1,
buttonText: {
today: '今天',
month: '月',
week: '周',
day: '日',
prev: '上一月',
next: '下一月'
},
allDaySlot:false,
selectable: true,
selectHelper: true,
aspectRatio:2.7,
editable: false,
allDayDefault:false,
viewDisplay: function(view) {
var viewStart = $.fullCalendar.formatDate(view.start,"yyyy-MM-dd HH:mm:ss");
var viewEnd = $.fullCalendar.formatDate(view.end,"yyyy-MM-dd HH:mm:ss");
$("#calendar").fullCalendar('removeEvents');
$.getJSON('http://localhost:8080/pnote/schedule/listevents.action',{start:viewStart,end:viewEnd},function(data) {
for(var i=0;i<data.length;i++) {
var obj = new Object();
obj.id = data[i].id;
obj.title = data[i].title;
obj.description = data[i].description;
obj.color = data[i].color;
obj.remindertime = $.fullCalendar.parseDate(data[i].remindertime);
obj.messagenotice = data[i].messagenotice;
obj.description = data[i].description;
obj.start = $.fullCalendar.parseDate(data[i].start);
obj.end = $.fullCalendar.parseDate(data[i].end);
$("#calendar").fullCalendar('renderEvent',obj,true);
}
}); //把从后台取出的数据进行封装以后在页面上以fullCalendar的方式进行显示
},
eventMouseover: function(event, jsEvent, view){
showDetail(event, jsEvent);
},
eventMouseout: function(event, jsEvent, view){
$('#tip').remove();
},
//日程点击:添加日程
dayClick: function(date, allDay, jsEvent, view) {
var obj =new Object();
art.dialog.open('newschedule.html',{
title: '添加日程',
lock: true,
width:300,
height:400,
fixed: true, //固定定位
//background: '#600', // 背景色
opacity: 0.6, // 透明度
// 在open()方法中,init会等待iframe加载完毕后执行
init: function () {
var iframe = this.iframe.contentWindow;
//var top = art.dialog.top;// 引用顶层页面window对象
var start = iframe.document.getElementById('form-start');
start.value = $.fullCalendar.formatDate(date,"yyyy-MM-dd HH:mm:ss");
},
okVal:'提交日程',
ok: function () {
var iframe = this.iframe.contentWindow;
if (!iframe.document.body) {
alert('iframe还没加载完毕呢');
return false;
}; var start = iframe.document.getElementById('form-start').value;
var end = iframe.document.getElementById('form-end').value;
var remindertime = iframe.document.getElementById('form-remindertime').value;
obj.title = iframe.document.getElementById('form-title').value;
obj.description = iframe.document.getElementById('form-description').value;
obj.start = $.fullCalendar.parseDate(start);
obj.end = $.fullCalendar.parseDate(end);
obj.color = iframe.document.getElementById('form-color').value;
if (obj.title== '') {
alert("标题不能为空");
return false;
}else if(start== '') {
alert("开始日期不能为空");
return false;
}else if(end == '') {
alert("结束日期不能为空");
return false;
}else if(iframe.document.getElementById('form-messagenotice').checked) {
if(remindertime == '') {
alert("短信提醒时间不能为空");
return false;
}
obj.messagenotice = 1;
obj.remindertime = $.fullCalendar.parseDate(remindertime);
}else {
obj.messagenotice = 0;
obj.remindertime = null;
} $.post("http://localhost:8080/pnote/schedule/addevents",{//把刚输入的日程计划信息传到后台,保存到数据库
title: obj.title,
start:start,
end:end,
description:obj.description,
remindertime:remindertime,
color:obj.color,
messagenotice:obj.messagenotice
},
function (data, textStatus){
obj.id = data[0].id;
}, "json"
);
$('#calendar').fullCalendar('renderEvent', obj); //核心的更新代码
$('#calendar').fullCalendar('unselect');
art.dialog.notice({
title: '笔记之家',
width: 150,// 必须指定一个像素宽度值或者百分比,否则浏览器窗口改变可能导致artDialog收缩
content: '日程已添加至后台!',
icon: 'face-smile',
time: 3
});
return true;
},
cancel: true
});
},
eventClick:function(calEvent, jsEvent, view){
art.dialog.open('newschedule.html', {
title: '更新日程',
lock: true,
width:300,
height:400,
//background: '#600', // 背景色
opacity: 0.6, // 透明度
// 在open()方法中,init会等待iframe加载完毕后执行
init: function () {
var iframe = this.iframe.contentWindow;
//var top = art.dialog.top;// 引用顶层页面window对象
iframe.document.getElementById('form-start').value = $.fullCalendar.formatDate(calEvent.start,"yyyy-MM-dd HH:mm:ss");
iframe.document.getElementById('form-end').value = $.fullCalendar.formatDate(calEvent.end,"yyyy-MM-dd HH:mm:ss");
iframe.document.getElementById('form-description').value = calEvent.description;
iframe.document.getElementById('form-title').value = calEvent.title;
if(calEvent.messagenotice == 1) {
iframe.document.getElementById('form-messagenotice').checked = true;
iframe.document.getElementById('form-remindertime').value = $.fullCalendar.formatDate(calEvent.remindertime,"yyyy-MM-dd HH:mm:ss");
iframe.document.getElementById('showtxt').style.display='block';
}else {
}
iframe.document.getElementById('form-color').value = calEvent.color;
},
okVal:'修改日程',
ok: function () {
var iframe = this.iframe.contentWindow;
if (!iframe.document.body) {
alert('iframe还没加载完毕呢')
return false;
}; var start = iframe.document.getElementById('form-start').value;
var end = iframe.document.getElementById('form-end').value;
var remindertime = iframe.document.getElementById('form-remindertime').value;
calEvent.title = iframe.document.getElementById('form-title').value;
calEvent.description = iframe.document.getElementById('form-description').value;
calEvent.start = $.fullCalendar.parseDate(start);
calEvent.end = $.fullCalendar.parseDate(end);
calEvent.color = iframe.document.getElementById('form-color').value;
if (calEvent.title== '') {
alert("标题不能为空");
return false;
}else if(start== '') {
alert("开始日期不能为空");
return false;
}else if(end == '') {
alert("结束日期不能为空");
return false;
}else if(iframe.document.getElementById('form-messagenotice').checked) {
if(remindertime == '') {
alert("短信提醒时间不能为空");
return false;
}
calEvent.messagenotice = 1;
calEvent.remindertime = $.fullCalendar.parseDate(remindertime);
}else {
calEvent.messagenotice = 0;
calEvent.remindertime = null;
}
$.post("http://localhost:8080/pnote/schedule/updateevents",{//把要更新的日程计划信息传到后台,保存到数据库
id:calEvent.id,
title: calEvent.title,
start:start,
end:end,
description:calEvent.description,
color:calEvent.color,
remindertime:remindertime,
messagenotice:calEvent.messagenotice
}
);
$('#calendar').fullCalendar('updateEvent', calEvent);
//弹出提示
art.dialog.notice({
title: '笔记之家',
width: 150,// 必须指定一个像素宽度值或者百分比,否则浏览器窗口改变可能导致artDialog收缩
content: '日程已更新!',
icon: 'face-smile',
time: 3
});
return true;
},
cancel: true,
//删除日程,保存到数据库
button: [{
name: '删除日程',
callback: function () {
//this.content('你同意了').time(2);
$.post("http://localhost:8080/pnote/schedule/deleteevents",{
id:calEvent.id
});
$('#calendar').fullCalendar('removeEvents',calEvent.id);
art.dialog.notice({
title: '笔记之家',
width: 150,// 必须指定一个像素宽度值或者百分比,否则浏览器窗口改变可能导致artDialog收缩
content: '日程已删除!',
icon: 'face-smile',
time: 3
});
return true;
}
}]
});
}
});
}); function showDetail(obj, e){
var str;
if(obj.messagenotice == 1) str = "短信提醒时间:"+$.fullCalendar.formatDate(obj.remindertime,"yyyy-MM-dd HH:mm:ss");
else {str = "短信提醒未启动";}
var eInfo = '<div id="tip"><ul>';
eInfo += '<li class="clock">' + '开始:'+$.fullCalendar.formatDate(obj.start,"yyyy-MM-dd HH:mm:ss") +'</br>结束:'+$.fullCalendar.formatDate(obj.end,"yyyy-MM-dd HH:mm:ss")+ '</li>';
eInfo += '<li class="message">' +'日志:'+ obj.description + '<br/> </li>';
//eInfo += '<li>分类:' + obj.title + '</li>';
eInfo += '<li class="postmessage">' + str + '<br/> </li>';
eInfo += '</ul></div>';
$(eInfo).appendTo($('body'));
$('#tip').css({"opacity":"0.4", "display":"none", "left":(e.pageX + 20) + "px", "top":(e.pageY + 10) + "px"}).fadeTo(600, 0.9);
//鼠标移动效果
$('.fc-event-inner').mousemove(function(e){
$('#tip').css({'top': (e.pageY + 10), 'left': (e.pageX + 20)});
});
} </script>
<style type='text/css'> body {
margin-top: 10px;
text-align: center;
font-size: 13px;
font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
} /********************************************** 鼠标悬停tip提示 ************************************************/
#tip{
position: absolute;
width: 250px;
max-width: 400px;
text-align: left;
padding: 4px;
border: #87CEEB solid 7px;
border-radius: 5px;
background: #00BFFF;
z-index: 1000;
behavior: url('/css/css3/pie.htc');
}
#tip ul{
margin: 0;
padding: 0;
}
#tip ul li{
font-family:'Microsoft YaHei', 微软雅黑, 'Microsoft JhengHei', 宋体;
font-size:15px;
list-style: none;
padding-left: 40px;
}
.clock{
/*line-height: 60px;*/
background: url('./fullcalendar/images/clock.png') no-repeat;
background-size:40px 40px;
}
.postmessage{
/*line-height: 60px;
font-size: 12px;*/
background: url('./fullcalendar/images/message.png') no-repeat;
background-size:40px 40px;
}
.message{
/*margin-top: 5px;*/
/*line-height: 60px;*/
background: url('./fullcalendar/images/text.png') no-repeat;
background-size:40px 40px;
}
</style>
</head>
<body>
<div id="container">
<div id='selectdate'></div>
<div id='calendar'></div>
</div>
</body>
</html>