.net mvc页面UI之Jquery博客日历控件
摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果。代码如下:
原文链接转载请注明:http://www.kwstu.com/ArticleView/admin_2013916154649951
一、效果图
二、页面文件
页面上需要添加<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() - ; 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 = ; index < arr.length; index++) { if (val == arr[index]) { return index + ; } } return false; } //获取月份对应中文 function monthCn(month) { var m = new Array(, , , , , , , , , , , ); return m[month]; } //获取星期对应中文 function dayCn(day) { var w = new Array('日', '一', '二', '三', '四', '五', '六'); return w[day]; } //获取选择月对应的实际天数(也是本月的最后一天) function getDates(year, month) { var d = new Date(year, month, ).getDate(); return d; } //选择月的上个月的记录第几天 function prevDay(year, month, date) { var y = year; var m = month - ; var d = -(date - ); var p = new Date(y, m, d).getDate(); return p; } //选择月的下个月的记录第几天 function nextDay(year, month, date) { var y = year; var m = month; var d = ; var p = new Date(y, m, d).getDate(); return p; } //活动数组数据解析--日期 function jsonDate(data) { var j = new Array(); for (var i = ; i < data.length; i++) { j.push(data[i].hDongD); } return j; } //活动数组数据解析--网址 function jsonUrl(data) { var j = new Array(); for (var i = ; 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, ).getDay() + ; //获取选择月对应的实际天数(也是本月的最后一天) 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 = ; //记录第几天 var $dayTd = ; //记录第几天的TD var $rowMax = Math.ceil((lDate + fDay - ) / ); //总行数 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 = ; i < ; i++) { html += '<td>' + dayCn(i) + '</td>'; } html += '</tr>'; //显示日 for (var row = ; row <= $rowMax; row++) { html += '<tr>'; for (var col = ; col <= ; 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 - ]; //如果有活动则使用活动样式并加上活动链接 if (dayIndex) { //如果日期为当天则用红色加粗显示 if ($dayN == date && $nowMonth + == 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 + == 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 * - ($dayN - )) - ($dayTd - ); for (var i = ; 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: ; } a { text-decoration: none; color: #; } a:hover { text-decoration: none; } /* ================================================================================ */ /* 日历Div全局样式 */ #cal { width: 245px; } #cal_bottom { padding: 2px; border-top: ; text-align: right; } /* 日历Table样式 */ table { border: ; border-collapse: collapse; border-spacing: ; } 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: %; height: %; } /* 当前日样式 */ .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 == ? ("" + 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=; output.Append("new Array("); foreach (var cc in res) { if (i == ) 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: 'http://www.ipiao.com' }, { hDongD: 14, hDongUrl: 'http://www.1.com' });"); }
.net mvc页面UI之Jquery博客日历控件的更多相关文章
- ASP.NET MVC页面UI之联动下拉选择控件(省、市、县联动选择)
地区选择操作在WEB应用中比较常见的操作,本文在.net mvc3下实现了省市县三级联动选择功能. 本文博客出处:http://www.kwstu.com/ArticleView/admin_2013 ...
- jquery博客收集的IE6中CSS常见BUG全集及解决方案
今天的样式调的纠结,一会这边一会那么把jquery博客折腾的头大,浏览器兼容性.晚上闲着收集一些常见IE6中的BUG 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的空隙,有 ...
- JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客
JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客https://blog.csdn.net/KooKing_L/article/details/79711379
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...
- jQuery 日历控件 FullCalendar 初识
最近有个日程管理的需求,就学习了一下 FullCalendar 控件的一些基本知识,本文不是详细介绍该控件的 API 的文档,而是记录本人使用过程中的一些学习情况. 先看一下效果图 月/周/日视图 ...
- jquery的上传控件uploadly,每行都有一个这样的控件对id选择器的使用
1.先看看预览图 这个是我的页面,其中如果我没点击添加一行的时候,会把本来有的数据进行循环出来,这个时候每个记录都必须有个上传图片的按钮,但是jquery的uploadly这个控件只是锁定id的,至少 ...
- jquery插件——日历控件
今天在网上有看到一个jquery插件——日历控件,不过之前也在柯乐义的网站上看到了(http://keleyi.com/ 推荐下) 这个插件看着比较大气,所以干脆也分享下,以后自己也好用一点儿 1.页 ...
- mvc 日历控件
第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...
随机推荐
- Jquery--仿制360右下角弹出窗口
原文:Jquery--仿制360右下角弹出窗口 先发浏览器效果图,给大家看. 要实现这样的效果,按照思路,第一步,写好CSS布局,将图片放到浏览器右下角的位置 CSS代码很灵活,我写的只是简单的一种而 ...
- 每日算法37:Rotate Image (图像旋转)
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- 使用ButterKnife无法inject view的解决办法
使用ButterKnife做android开发时,发现无法inject,如下,tvInfo总是null. @InjectView(R.id.textView1Info) TextView tvInfo ...
- iis配置PHP
今天在服务器上配置PHP出现在下面的问题:“HTTP 错误 500.0 - Internal Server Error,C:\php\php-cgi.exe - FastCGI 进程意外退出”,下面说 ...
- HTML静态分页(形如:首页,上一页,下一页,尾页)
在HTML中有时候我们会用到静态分页,一次拿回一定量的数据结果条目,我们会以形如:第2页,共12页 首页 上一页 下一页 尾页 的方式进行静态分页,以下是该种静态分页的代码,供兄弟姐妹们参考. &l ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- C语言运算符表(优先级)
http://www.is.pku.edu.cn/~qzy/c/operator.htm
- SQL 中OPENQUERY的使用
原文:SQL 中OPENQUERY的使用 OpenQuery 是SQL Server用来与其他Server交互的一种技术,通过OpenQuery,SQL Server 可以直接访问其他数据库资源. 而 ...
- ubuntu下的词典的安装
因为从事开发,安装一个词典是很有必要,文中介绍安装openyoudao和stardic两个软件的方法 一.openyoudao的安装 因为是由window转来学ubuntu的,所以总是想安装和wind ...
- cocos2dx对于强大的RichText控制
最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控制显示屏聊天,在使用中发现的结果,cocos2dx的RichText很有限.全然不具备实现聊天的功能.仅仅实现了增加文本.图 ...