前言

  前几天加班比较忙 未能及时更新翻译的 今天多发布几篇。。下载该插件翻译源码

日历控件显示一个月的日历,允许用户选择日期和移动到下一个或上一个月。默认情况下,一周的第一天是周日。它可以通过设置'firstDay'属性的值来更改设置

源码

/**
* jQuery EasyUI 1.3.2
*
*翻译:qq 1364386878
*/
(function ($) {
//调整日历大小
function _resize(jq) {
var opts = $.data(jq, "calendar").options;
var t = $(jq);
if (opts.fit == true) {
var p = t.parent();
opts.width = p.width();
opts.height = p.height();
}
var header = t.find(".calendar-header");
t._outerWidth(opts.width);
t._outerHeight(opts.height);
t.find(".calendar-body")._outerHeight(t.height() - header._outerHeight());
};
// 包裹日历
function wrapCalendar(jq) {
//wrapInner()方法使用指定的 HTML 内容或元素,来包裹每个被选元素中的所有内容 (inner HTML)。
//详情参考http://www.w3school.com.cn/jquery/manipulation_wrapinner.asp
$(jq).addClass("calendar").wrapInner("<div class=\"calendar-header\">"
+ "<div class=\"calendar-prevmonth\"></div>"
+ "<div class=\"calendar-nextmonth\"></div>"
+ "<div class=\"calendar-prevyear\"></div>"
+ "<div class=\"calendar-nextyear\"></div>"
+ "<div class=\"calendar-title\">"
+ "<span>Aprial 2010</span>"
+ "</div>"
+ "</div>"
+ "<div class=\"calendar-body\">"
+ "<div class=\"calendar-menu\">"
+ "<div class=\"calendar-menu-year-inner\">"
+ "<span class=\"calendar-menu-prev\"></span>"
+ "<span><input class=\"calendar-menu-year\" type=\"text\"></input></span>"
+ "<span class=\"calendar-menu-next\"></span>"
+ "</div>"
+ "<div class=\"calendar-menu-month-inner\">"
+ "</div>"
+ "</div>"
+ "</div>");
//日历头部“年月”hover、click事件
$(jq).find(".calendar-title span").hover(function () {
$(this).addClass("calendar-menu-hover");
}, function () {
$(this).removeClass("calendar-menu-hover");
}).click(function () {
var menu = $(jq).find(".calendar-menu");
if (menu.is(":visible")) {
menu.hide();
} else {
showMenu(jq);//显示年份和月份选择的菜单
}
});
//日历头部四个按钮hover、click事件
$(".calendar-prevmonth,.calendar-nextmonth,.calendar-prevyear,.calendar-nextyear", jq).hover(function () {
$(this).addClass("calendar-nav-hover");
}, function () {
$(this).removeClass("calendar-nav-hover");
});
$(jq).find(".calendar-nextmonth").click(function () {
toMonth(jq, 1);//下月
});
$(jq).find(".calendar-prevmonth").click(function () {
toMonth(jq, -1);//上月
});
$(jq).find(".calendar-nextyear").click(function () {
toYear(jq, 1);//下年
});
$(jq).find(".calendar-prevyear").click(function () {
toYear(jq, -1);//上年
});
$(jq).bind("_resize", function () {
var options = $.data(jq, "calendar").options;
if (options.fit == true) {
_resize(jq);
}
return false;
});
};
//上一月、下一月选择按钮处理方法 1:表示下月;-1:表示上月
function toMonth(jq, tag) {
var opts = $.data(jq, "calendar").options;
opts.month += tag;
if (opts.month > 12) {
opts.year++;
opts.month = 1;
} else {
if (opts.month < 1) {
opts.year--;
opts.month = 12;
}
}
renderCalendar(jq);
//日历头部月份更改
var inner = $(jq).find(".calendar-menu-month-inner");
inner.find("td.calendar-selected").removeClass("calendar-selected");
inner.find("td:eq(" + (opts.month - 1) + ")").addClass("calendar-selected");
};
//上一年、下一年选择按钮处理方法 (1:表示下年;-1:表示上年)
function toYear(jq, tag) {
var options = $.data(jq, "calendar").options;
options.year += tag;
renderCalendar(jq);
////日历头部年份更改
var year = $(jq).find(".calendar-menu-year");
year.val(options.year);
};
//显示年份和月份选择的菜单
function showMenu(jq) {
var opts = $.data(jq, "calendar").options;
$(jq).find(".calendar-menu").show();
if ($(jq).find(".calendar-menu-month-inner").is(":empty")) {
$(jq).find(".calendar-menu-month-inner").empty();
////表格布局月份选择菜单
var t = $("<table></table>").appendTo($(jq).find(".calendar-menu-month-inner"));
var idx = 0;
for (var i = 0; i < 3; i++) {
var tr = $("<tr></tr>").appendTo(t);
for (var j = 0; j < 4; j++) {
$("<td class=\"calendar-menu-month\"></td>").html(opts.months[idx++]).attr("abbr", idx).appendTo(tr);
}
}
$(jq).find(".calendar-menu-prev,.calendar-menu-next").hover(function () {
$(this).addClass("calendar-menu-hover");
}, function () {
$(this).removeClass("calendar-menu-hover");
});
//下年按钮click事件 $(jq).find(".calendar-menu-next").click(function () {
var y = $(jq).find(".calendar-menu-year");
if (!isNaN(y.val())) {
y.val(parseInt(y.val()) + 1);
}
});
//上年按钮click事件
$(jq).find(".calendar-menu-prev").click(function () {
var y = $(jq).find(".calendar-menu-year");
if (!isNaN(y.val())) {
y.val(parseInt(y.val() - 1));
}
});
//菜单年份输入框keypress事件
$(jq).find(".calendar-menu-year").keypress(function (e) {
if (e.keyCode == 13) {
hideMenu();
}
});
//菜单月份hover、click事件
$(jq).find(".calendar-menu-month").hover(function () {
$(this).addClass("calendar-menu-hover");
}, function () {
$(this).removeClass("calendar-menu-hover");
}).click(function () {
var menu = $(jq).find(".calendar-menu");
menu.find(".calendar-selected").removeClass("calendar-selected");
$(this).addClass("calendar-selected");
hideMenu();
});
}
//隐藏菜单
function hideMenu() {
var menu = $(jq).find(".calendar-menu");
var year = menu.find(".calendar-menu-year").val();//获取菜单年份输入框值
var _1b = menu.find(".calendar-selected").attr("abbr");//获取菜单选择的月份值
if (!isNaN(year)) {
opts.year = parseInt(year);
opts.month = parseInt(_1b);
renderCalendar(jq);
}
menu.hide();
}; var body = $(jq).find(".calendar-body");
var menu = $(jq).find(".calendar-menu");
var yearInner = menu.find(".calendar-menu-year-inner");
var monthInner = menu.find(".calendar-menu-month-inner");
yearInner.find("input").val(opts.year).focus();//默认年份输入框获得焦点
monthInner.find("td.calendar-selected").removeClass("calendar-selected");
monthInner.find("td:eq(" + (opts.month - 1) + ")").addClass("calendar-selected");
menu._outerWidth(body._outerWidth());
menu._outerHeight(body._outerHeight());
monthInner._outerHeight(menu.height() - yearInner._outerHeight());
};
//根据年月获取日历所要显示的日期数组
function getDateArray(jq, year, month) {
var opts = $.data(jq, "calendar").options;
var dateArray = [];
var date = new Date(year, month, 0).getDate();
for (var i = 1; i <= date; i++) {
dateArray.push([year, month, i]);
}
//dates是存放星期六-星期天的日期的二维数组
//result是存放dates的数组
//result格式:[[[year,month,day],...,[]],...,[]]
var result = [], dates = [];
var _29 = -1;
while (dateArray.length > 0) {
//shift()方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
var date = dateArray.shift();
dates.push(date);
var day = new Date(date[0], date[1] - 1, date[2]).getDay();
if (_29 == day) {
day = 0;
} else {
if (day == (opts.firstDay == 0 ? 7 : opts.firstDay) - 1) {
result.push(dates);
dates = [];
}
}
_29 = day;
}
if (dates.length) {
result.push(dates);
}
var firstWeek = result[0];//获取第一个星期
//若不足7天,取前面日期补足
if (firstWeek.length < 7) {
while (firstWeek.length < 7) {
var firstDate = firstWeek[0];
var date = new Date(firstDate[0], firstDate[1] - 1, firstDate[2] - 1);
firstWeek.unshift([date.getFullYear(), date.getMonth() + 1, date.getDate()]);
}
} else {
var firstDate = firstWeek[0];
var dates = [];
for (var i = 1; i <= 7; i++) {
var date = new Date(firstDate[0], firstDate[1] - 1, firstDate[2] - i);
dates.unshift([date.getFullYear(), date.getMonth() + 1, date.getDate()]);
}
//unshift()方法可向数组的开头添加一个或更多元素,并返回新的长度。
result.unshift(dates);
}
var lastWeek = result[result.length - 1];//获取最后一个星期
//若不足7天,取后面日期补足
while (lastWeek.length < 7) {
var lastDate = lastWeek[lastWeek.length - 1];
var date = new Date(lastDate[0], lastDate[1] - 1, lastDate[2] + 1);
lastWeek.push([date.getFullYear(), date.getMonth() + 1, date.getDate()]);
}
if (result.length < 6) {
var lastDate = lastWeek[lastWeek.length - 1];
var dates = [];
for (var i = 1; i <= 7; i++) {
var date = new Date(lastDate[0], lastDate[1] - 1, lastDate[2] + i);
dates.push([date.getFullYear(), date.getMonth() + 1, date.getDate()]);
}
result.push(dates);
}
return result;
};
// 渲染日历
function renderCalendar(jq) {
var opts = $.data(jq, "calendar").options;
$(jq).find(".calendar-title span").html(opts.months[opts.month - 1] + " " + opts.year);//设置日历头部年月值
var body = $(jq).find("div.calendar-body");
body.find(">table").remove();//清空日历body
//table布局日历body
var t = $("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><thead></thead><tbody></tbody></table>").prependTo(body);
var tr = $("<tr></tr>").appendTo(t.find("thead")); for (var i = opts.firstDay; i < opts.weeks.length; i++) {
tr.append("<th>" + opts.weeks[i] + "</th>");
}
for (var i = 0; i < opts.firstDay; i++) {
tr.append("<th>" + opts.weeks[i] + "</th>");
}
var _32 = getDateArray(jq, opts.year, opts.month);
for (var i = 0; i < _32.length; i++) {
var _33 = _32[i];
var tr = $("<tr></tr>").appendTo(t.find("tbody"));
for (var j = 0; j < _33.length; j++) {
var day = _33[j];
$("<td class=\"calendar-day calendar-other-month\"></td>").attr("abbr", day[0] + "," + day[1] + "," + day[2]).html(day[2]).appendTo(tr);
}
}
t.find("td[abbr^=\"" + opts.year + "," + opts.month + "\"]").removeClass("calendar-other-month");
var now = new Date();
var _34 = now.getFullYear() + "," + (now.getMonth() + 1) + "," + now.getDate();
t.find("td[abbr=\"" + _34 + "\"]").addClass("calendar-today");
if (opts.current) {
t.find(".calendar-selected").removeClass("calendar-selected");
var _35 = opts.current.getFullYear() + "," + (opts.current.getMonth() + 1) + "," + opts.current.getDate();
t.find("td[abbr=\"" + _35 + "\"]").addClass("calendar-selected");
}
var _36 = 6 - opts.firstDay;
var _37 = _36 + 1;
if (_36 >= 7) {
_36 -= 7;
}
if (_37 >= 7) {
_37 -= 7;
}
t.find("tr").find("td:eq(" + _36 + ")").addClass("calendar-saturday");
t.find("tr").find("td:eq(" + _37 + ")").addClass("calendar-sunday");
t.find("td").hover(function () {
$(this).addClass("calendar-hover");
}, function () {
$(this).removeClass("calendar-hover");
}).click(function () {
t.find(".calendar-selected").removeClass("calendar-selected");
$(this).addClass("calendar-selected");
var _38 = $(this).attr("abbr").split(",");
opts.current = new Date(_38[0], parseInt(_38[1]) - 1, _38[2]);
opts.onSelect.call(jq, opts.current);
});
};
//初始化日历
$.fn.calendar = function (options, parm) {
if (typeof options == "string") {
return $.fn.calendar.methods[options](this, parm);
}
options = options || {};
return this.each(function () {
var calendar = $.data(this, "calendar");
if (calendar) {
$.extend(calendar.options, options);
} else {
calendar = $.data(this, "calendar",
{ options: $.extend({}, $.fn.calendar.defaults, $.fn.calendar.parseOptions(this), options) });
wrapCalendar(this);
}
if (calendar.options.border == false) {
$(this).addClass("calendar-noborder");
}
_resize(this);
renderCalendar(this);
$(this).find("div.calendar-menu").hide();
});
};
//日历默认方法
$.fn.calendar.methods = {
//返回参数对象。
options: function (jq) {
return $.data(jq[0], "calendar").options;
},
//调整日历大小
resize: function (jq) {
return jq.each(function () {
_resize(this);
});
},
//移动日历到指定日期
moveTo: function (jq, date) {
return jq.each(function () {
$(this).calendar({ year: date.getFullYear(), month: date.getMonth() + 1, current: date });
});
}
};
//解析器配置
$.fn.calendar.parseOptions = function (target) {
var t = $(target);
return $.extend({}, $.parser.parseOptions(target, ["width", "height", { firstDay: "number", fit: "boolean", border: "boolean" }]));
};
//日历默认 属性和事件
$.fn.calendar.defaults = {
//日历控件宽度
width: 180,
//日历控件高度
height: 180,
//当设置为true的时候,将设置日历控件大小自适应父容器
fit: false,
//定义是否显示边框
border: true,
//定义一周的第一天是星期几。0=星期日、1=星期一 等
firstDay: 0,
//显示的周列表内容
weeks: ["S", "M", "T", "W", "T", "F", "S"],
//显示的月列表内容
months: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
//年日历。下面的例子显示了如何使用指定的年份和月份创建一个日历
year: new Date().getFullYear(),
//月日历。
month: new Date().getMonth() + 1,
//当前日期
current: new Date(),
//在用户选择一天的时候触发
onSelect: function (_3e) {
}
};
})(jQuery);

示例代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic Calendar - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
<script src="../../plugins2/jquery.parser.js"></script>
<script src="../../plugins2/jquery.calendar.js"></script>
</head>
<body>
<h2>Basic Calendar</h2>
<div class="demo-info" style="margin-bottom:10px">
<div class="demo-tip icon-tip"></div>
<div>Click to select date.</div>
</div> <div class="easyui-calendar" style="width:180px;height:180px;"></div> </body>
</html>

插件效果

easyui源码翻译1.32--Calendar(日历)的更多相关文章

  1. easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)

    前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...

  2. easyui源码翻译1.32--datagrid(数据表格)

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

  3. easyui源码翻译1.32--DateBox(日期输入框)

    前言 扩展自$.fn.combo.defaults.使用$.fn.datebox.defaults重写默认值对象.下载该插件翻译源码 日期输入框结合了一个可编辑的文本框控件和允许用户选择日期的下拉日历 ...

  4. easyui源码翻译1.32--EasyLoader(简单加载)

    前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3. ...

  5. easyui源码翻译1.32--DateTimeBox(日期时间输入框)

    前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 和日期输入框类似,日期时间输入框允许用户选择日期和指定 ...

  6. easyui源码翻译1.32--Draggable(拖动)

    前言 使用$.fn.draggable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 --拖动 ...

  7. easyui源码翻译1.32--Droppable(放置)

    前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...

  8. easyui源码翻译1.32--Resizable(调整大小)

    前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 Resiz ...

  9. easyui源码翻译1.32--Pagination(分页)

    前言 使用$.fn.pagination.defaults重写默认值对象下载该插件翻译源码 该分页控件允许用户导航页面的数据.它支持页面导航和页面长度选择的选项设置.用户可以在分页控件上添加自定义按钮 ...

随机推荐

  1. HTTP 错误 500.21 - Internal Server Error的解决方案

    开始菜单>所有程序>附件>命令提示符(以管理员的身份运行) 然后运行下面的命令注册: 32位机器: C:\Windows\Microsoft.NET\Framework\v4.0.3 ...

  2. LeetCode初体验—twoSum

    今天注册了大名鼎鼎的LeetCode,做了一道最简单的算法题目: Given an array of integers, return indices of the two numbers such ...

  3. python 笔记(一)

    1.Python优点 简单,优雅,明确 强大的模块第三方库 易移植 面向对角 可扩展 2.缺点 代码不能加密 执行速度慢 3.变量定义 第一个字母必须是字母表中的大小写,或下划线.不能以数字为开头. ...

  4. croppic 图片裁剪

    #region 3.1.3 保存裁剪后的图片方法 +ContentResult TemplateCropImg() /// <summary> /// 保存裁剪后的图片方法 /// < ...

  5. Thread多线程stopSleep顺序问题

    今天呢,学习了javase多线程,里面的睡眠sleep问题有点困扰: public class Thread_06_stopSleep{ public static void main(String[ ...

  6. WIX: Hide installed program from the Add/Remove Programs window.

    Reference article : How to hide an entry in the Add/Remove Programs applet? In Wix source files, set ...

  7. Mustache

    简要介绍 玩过node的人应该都知道ejs,jade. mustache和他们一样都是模板渲染引擎,我个人喜欢mustache,因为他非常简洁,代码量才600多行. mustache既可以在前端使用, ...

  8. selenium自动化测试(1):环境搭建

    Selenium是一款优秀的WEB自动化测试工具,它功能强大,易于使用,支持多种平台.多种浏览器和多种开发语言.这里介绍使用python+selenium进行自动化测试的一些基础知识. 在Window ...

  9. Linux初始root密码设置

    刚安装好的Linux系统是没有设置root用户密码的,下边介绍如何设置root用户的密码 第一步:sudo passwd 第二步:输入密码 第三步:确认密码 这样三个步骤过后root用户的密码就设置好 ...

  10. js实现克隆一个对象

    var app={}; app.cloneobj= function(obj){ var o; if(typeof obj == "object"){ if(obj===null) ...