.net mvc页面UI之Jquery博客日历控件实现代码
程序员文章站
2024-03-31 16:01:10
一、效果图
二、页面文件
页面上需要添加标记。
三、js代码
复制代码 代码如下:// java...
一、效果图
二、页面文件
页面上需要添加<div id="cal"></div>标记。
三、js代码
复制代码 代码如下:
// javascript 日历
$(document).ready(function () {
//当前时间
$now = new date(); //当前的时间
$nowyear = $now.getfullyear(); //当前的年
$nowmonth = $now.getmonth(); //当前的月
$nowdate = $now.getdate(); //当前的日
$nowmonthcn = monthcn($nowmonth); //格式化后的月
//第一次设置当前时间
calopt($now);
//上个月鼠标点击事件
$('#prevmonth').live('click', function () {
var year_text = $('.thisyear').text();
var month_text = $('.thismonth').text() - 2;
var date_text = $('.thisdate').text();
$('#cal').html('');
var d = new date(year_text, month_text, date_text);
calopt(d);
return false;
});
//下个月鼠标点击事件
$('#nextmonth').live('click', function () {
var year_text = $('.thisyear').text();
var month_text = $('.thismonth').text();
var date_text = $('.thisdate').text();
$('#cal').html('');
var d = new date(year_text, month_text, date_text);
calopt(d);
return false;
});
//关闭日历鼠标点击事件
$('#cal_close').live('click', function () {
$('#cal').html('');
$('#cal').hide();
return false;
});
});
//是否在数组中?返回下标+1
function inarray(val, arr) {
for (var index = 0; index < arr.length; index++) {
if (val == arr[index]) {
return index + 1;
}
}
return false;
}
//获取月份对应中文
function monthcn(month) {
var m = new array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
return m[month];
}
//获取星期对应中文
function daycn(day) {
var w = new array('日', '一', '二', '三', '四', '五', '六');
return w[day];
}
//获取选择月对应的实际天数(也是本月的最后一天)
function getdates(year, month) {
var d = new date(year, month, 0).getdate();
return d;
}
//选择月的上个月的记录第几天
function prevday(year, month, date) {
var y = year;
var m = month - 1;
var d = -(date - 2);
var p = new date(y, m, d).getdate();
return p;
}
//选择月的下个月的记录第几天
function nextday(year, month, date) {
var y = year;
var m = month;
var d = 1;
var p = new date(y, m, d).getdate();
return p;
}
//活动数组数据解析--日期
function jsondate(data) {
var j = new array();
for (var i = 0; i < data.length; i++) {
j.push(data[i].hdongd);
}
return j;
}
//活动数组数据解析--网址
function jsonurl(data) {
var j = new array();
for (var i = 0; i < data.length; i++) {
j.push(data[i].hdongurl);
}
return j;
}
//设置日历参数
function calopt(date) {
//获取选择系统时间
var $year = date.getfullyear(); //年
var $month = date.getmonth(); //月
var $date = date.getdate(); //日
var $day = date.getday(); //星期
var $monthcn = monthcn($month); //格式化后的月
//获取选择月的第一天对应的星期数+1
var $fday = new date($year, $month, 1).getday() + 1;
//获取选择月对应的实际天数(也是本月的最后一天)
var $ldate = getdates($year, $monthcn);
// alert('年:'+$year+'\n月:'+$monthcn+'\n日:'+$date+'\n选择月的第一天对应的星期数:'+$fday+'\n选择月的最后一天:'+$ldate);
//获取活动数组数据并输出日历
//var test = new array(
// { hdongd: 4, hdongurl: 'http://www.ipiao.com' },
// { hdongd: 14, hdongurl: 'http://www.1.com' }
//);
$.ajax({
type:'post',
url: "/pubconfig/getcalandday",
data:{'year':$year,'month':$monthcn},
datatype:'json',
success: function (result) {
if(result == null){ //如果无活动数组数据,则声明一个空数据
result = new array();
}
calshow($fday, $ldate, $date, $monthcn, $year, eval(result));
},
error: function (xmlhttprequest, textstatus, errorthrown) { //发送失败事件
alert(textstatus);
}
});
}
/*
输出日历
参数1:选择月的第一天对应的星期数+1;
参数2:选择月的最后一天;
参数3:选择的日;
参数4:选择的月;
参数5:选择的年;
参数6:活动数组数据;
*/
function calshow(fday, ldate, date, monthcn, year, data) {
var $dayn = 1; //记录第几天
var $daytd = 1; //记录第几天的td
var $rowmax = math.ceil((ldate + fday - 1) / 7); //总行数
var $prev_dayn = prevday(year, monthcn, fday);//选择月的上个月的记录第几天
var $next_dayn = nextday(year, monthcn, fday);//选择月的上个月的记录第几天
//显示table>tr>th
html = '<table>';
html += '<tr><th colspan=7>';
html += '<a id="prevmonth" href=""> << </a> ';
html += '<span class="thisyear">' + year + '</span>年' + '<span class="thismonth">' + monthcn + '</span>月<span class="thisdate">' + date + '</span>';
html += ' <a id="nextmonth" href=""> >> </a></th></tr>';
html += '</th></tr>';
//显示星期标题
html += '<tr>';
for (var i = 0; i < 7; i++) {
html += '<td>' + daycn(i) + '</td>';
}
html += '</tr>';
//显示日
for (var row = 1; row <= $rowmax; row++) {
html += '<tr>';
for (var col = 1; col <= 7; col++) {
if ($daytd < fday) {
html += '<td class="prev_dayn" dayn="' + $prev_dayn + '">' + $prev_dayn + '</td>';
$daytd++;
$prev_dayn++;
} else {
var dayindex = inarray($dayn, jsondate(data));
var urlindex = jsonurl(data)[dayindex - 1];
//如果有活动则使用活动样式并加上活动链接
if (dayindex) {
//如果日期为当天则用红色加粗显示
if ($dayn == date && $nowmonth + 1 == monthcn && $nowyear == year) {
html += '<td class="activity now_date" dayn="' + $dayn + '" title="点击查看当天活动"><a href="' + urlindex + '">' + $dayn + '</a></td>';
} else {
html += '<td class="activity" dayn="' + $dayn + '" title="点击查看当天活动"><a href="' + urlindex + '">' + $dayn + '</a></td>';
}
} else {
//如果日期为当天则用红色加粗显示
if ($dayn == date && $nowmonth + 1 == monthcn && $nowyear == year) {
html += '<td class="now_date" dayn="' + $dayn + '">' + $dayn + '</td>';
} else {
html += '<td dayn="' + $dayn + '">' + $dayn + '</td>';
}
}
$dayn++;
}
if ($dayn > ldate) {
var $next_daynum = (row * 7 - ($dayn - 1)) - ($daytd - 1);
for (var i = 0; i < $next_daynum; $next_daynum--) {
html += '<td class="next_dayn" dayn="' + $next_dayn + '">' + $next_dayn + '</td>';
$next_dayn++;
}
break;
}
}
html += '</tr>';
}
//结束输出table
html += '</table>';
html += '<div id="cal_bottom"><a id="cal_close" href="">关闭</a></div>';
$('#cal').append(html);
}
四、css文件
复制代码 代码如下:
@charset "utf-8";
* {
list-style: none;
margin: 0px;
padding: 0px;
}
img {
border: 0;
}
a {
text-decoration: none;
color: #666;
}
a:hover {
text-decoration: none;
}
/* ================================================================================ */
/* 日历div全局样式 */
#cal {
width: 245px;
}
#cal_bottom {
padding: 2px;
border-top: 0;
text-align: right;
}
/* 日历table样式 */
table {
border: 0;
border-collapse: collapse;
border-spacing: 0;
}
tr {
height: 30px;
line-height: 30px;
}
th {
font-weight: normal;
}
.thisdate {
display: none;
}
#prevmonth {
}
.nextmonth {
}
th a {
display: inline-block;
vertical-align: 1px;
}
td {
width: 35px;
text-align: center;
}
td a {
display: inline-block;
width: 100%;
height: 100%;
}
/* 当前日样式 */
.now_date {
background: #bbb;
}
/* 月前,月后样式 */
.prev_dayn, .next_dayn {
color: #ccc;
}
/* 活动数据样式 */
.activity {
}
.activity a {
color: #2f76ac;
text-decoration: underline;
}
五、后台代码
复制代码 代码如下:
//日历控件获取当前月发布文章的天
public actionresult getcalandday(string year, string month)
{
string userid = getbloguserid();
stringbuilder output = new stringbuilder("");
datetime dt = system.datetime.now;
string curmonth = year.tostring() + (month.length == 1 ? ("0" + month) : month);
var res = db.database.sqlquery<curmontharticleviewmodel>("select id,createtime from article where mid='" + userid + "' and to_char(createtime,'yyyymm')='" + curmonth + "'").tolist();
int i=0;
output.append("new array(");
foreach (var cc in res)
{
if (i == 0)
output.append("{ hdongd:"+cc.createtime.day+", hdongurl: '"+cc.id+"' }");
else
{
string curday = cc.createtime.day.tostring();
string resultday = output.tostring();
string[] str = resultday.split(','); //得到一个str的数组{“1”,”2“,“3”,”4“,“5”,”6“}
boolean c = true;
foreach (string s in str)
{
if (s == curday) c = false;
}
if (c)
{
output.append(",{ hdongd:" + cc.createtime.day + ", hdongurl: '/" + cc.id + "--" + cc.createtime + "' }");
}
}
i++;
}
output.append(");");
return json(output.tostring());
//return json("new array({ hdongd: 4, hdongurl: '//www.jb51.net' }, { hdongd: 14, hdongurl: 'http://play.jb51.net' });");
}