//格式化函数 Date原型扩展
Date.prototype.format = function(format)
{
var o = {
"M+" : this.getMonth()+1, // month
"d+" : this.getDate(),// day
"h+" : this.getHours(), // hour
"m+" : this.getMinutes(), // minute
"s+" : this.getSeconds(), // second
"q+" : Math.floor((this.getMonth()+3)/3), // quarter
"S" : this.getMilliseconds() // millisecond
}
if(/(y+)/.test(format))
format = format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)
if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k]
"00"+ o[k]).substr((""+ o[k]).length));
return format;
}
// 日期比较
function datecompare(startDate, endDate) {
var re = /^(\d{4})(\-)(\d{1,2})(\-)(\d{1,2})$/;
var d1 = new Date(startDate.replace(/-/g, "/"));
var d2 = new Date(endDate.replace(/-/g, "/"));
if (Date.parse(d1) - Date.parse(d2) == 0) {
// window.alert("两个日期相等");
return "1";
}
if (Date.parse(d1) - Date.parse(d2) < 0) {
// window.alert("结束日期 大于 开始日期");
return "2";
}
if (Date.parse(d1) - Date.parse(d2) > 0) {
// window.alert("结束日期 小于 开始日期");
return "3";
}
}
//添加一天
function DateAddOneDay(now){
return new Date(Date.parse(now) + (86400000 * 1))
}
这是我在本周珍珠奶茶会上做的分享。编码的细节太多太多,对于前端工程师,掌握主流常用的编码就可以了,并知晓后端处理URL编码的基本思路以及浏览器在 处理编码问题上的差异性。
ps:补充一点,encodeURIComponent和encodeURI,可以参照玉伯的例子
http://lifesinger.googlecode.com/svn/tr … _test.html
转一篇:taobao拔赤的一篇文章 写的很好 查看原文
程序层面,重点是?
框架包含:核心(core)、适配器(adapter)、基础接口(public api)、代码管理(sandbox & plugin)、组件库(widgets),显然,框架的重点在于基础接口、和代码管理机制的设计。widget的实现是基于框架提供的public api,public api interface一旦定型尽量不要更改,也就是说,设计要遵循编程基本原则:面向接口,而不是面向实现,这个原则的基本要求是接口的稳定性。因此,框架版本升级导致接口更改的情况可以不考虑?

框架设计师应当将有限的精力放在adapter、public api、sandbox & plugins上,以保证框架基础逻辑设计思路清晰,widget和外部plugin的实现则是纯粹工作量的堆积,可以由更多的人参与开发,以分担框架设计师的工作。
需不需要对core进行重构?
比较纠结的问题是,要不要对core进行重构?即将适配器以下都由自己重构,完全放弃现有的jquery或者yui,这个看情况,个人认为,使用现成的“库”是比较聪明的选择,开源的初衷不也是这样吗?我们要做的,只是将jquery式的api或者yui式的api转换成我想要的api格式即可,api的实现,有什么重要呢?
开发者的角色?
框架设计:框架设计师着力设计public api和sandbox & plugin,adapter可以另有人做,只要对adapter有规范完整的黑盒测试即可。
widget开发:可以由更多的人基于pbulic api开发大量的widget,入库保证有code review即可。
应用开发:任何人基于sandbox和widget都可以开发app了。
各自的视野?
对于框架的使用者来说,他们的视野仅限于sandbox、plugin usage、widgets,手旁只要准备一本public api手册就天下无敌了。对于框架开发小组来说,着重维护widget和api,把项目中的widgets不断抽离、code review并入库。对于工程师来说,他们的视野是一本手册和一些demo,没有必要理解框架的细节。对于那些业余的人来说,让他们一眼看到这个框架有这么多widget和demo,他们就会傻乎乎的开始用了。。。
因此,框架的开发,在于专业、在于坚持、在于团队,三者缺一不可。。。
上次abeet兄弟分享了即拷即用系列的动画函数 这次的onDOMReady更有吸引力了
先说明一下,为什么要提取jQuery的ready方法?
因为在很多时候大家做前端时,需要在DOM树载入时马上执行一些函数,比如对导航条进行初始化。
但又不愿意仅为了这一个需求而引入整个jQuery库,于是就把jQuery的ready方法提取出来,单独使用了。
另外你也可以在构建自己的js框架时使用此函数。
重复一遍,我们的口号是什么?
彪悍的应用,没有一行代码是多余的!!!
(function(){
var isReady=false; //判断onDOMReady方法是否已经被执行过
var readyList= [];//把需要执行的方法先暂存在这个数组里
var timer;//定时器句柄
ready=function(fn) {
if (isReady )
fn.call( document);
else
readyList.push( function() { return fn.call(this);});
return this;
}
var onDOMReady=function(){
for(var i=0;i<readyList.length;i++){
readyList[i].apply(document);
}
readyList = null;
}
var bindReady = function(evt){
if(isReady) return;
isReady=true;
onDOMReady.call(window);
if(document.removeEventListener){
document.removeEventListener("DOMContentLoaded", bindReady, false);
}else if(document.attachEvent){
document.detachEvent("onreadystatechange", bindReady);
if(window == window.top){
clearInterval(timer);
timer = null;
}
}
};
if(document.addEventListener){
document.addEventListener("DOMContentLoaded", bindReady, false);
}else if(document.attachEvent){
document.attachEvent("onreadystatechange", function(){
if((/loaded|complete/).test(document.readyState))
bindReady();
});
if(window == window.top){
timer = setInterval(function(){
try{
isReady||document.documentElement.doScroll('left');//在IE下用能否执行doScroll判断dom是否加载完毕
}catch(e){
return;
}
bindReady();
},5);
}
}
})();
使用方式如下
ready(navInit);//navInit为已存在的函数
//或
ready(function(){
if(agt.toLowerCase().indexOf("msie 6") != -1)
navInitForIE6();//如果浏览器是IE6,则执行navInitForIE6函数来初始化下拉菜单
});
再次感谢abeet的分享
Windows 画图程序一直伴随着 Windows 各个版本,这个很简单,几乎没有什么用处的程序拥有最基本的绘图功能,很适合用来涂鸦。HTML5 的 Canvas 对象使在线绘图成为可能,虽然 HTML5 还远未成熟,但很多人已经迫不及待地用它设计一些让人惊叹的应用。

CanvasPaint 是一个基于 HTML5 的标准 Windows 画图程序,它拥有和 Windows 画图程序一模一样的界面和操作,功能也几乎完全一样,在特定浏览器的支持下,你甚至可以将最后的作品保存到本机。这并不是最近的项目,2006年就有了, 因此,目前绝大多数支持标准的浏览器(Firefox,Safari,Chrome,Opera)都可以正常使用这个程序。以下是作者对这个项目的一些解 释。
为什么要开发这个程序?
目的不是为了开发一个 Windows 画图程序,而是体验 HTML5 的 Canvas 功能。
如何使用
和标准 Windows 绘图程序一样。
能保存吗?
是的,但只支持 Firefox 2 和 Opera 9 (译者注:这是作者2006年就实现的一个程序)。在本机保存,选择 File 菜单中的 Download,在线保存,选择 Save online,会自动生成一个 URL 在线显示你的作品。
浏览器本身的右键菜单影响使用
可以在浏览器的设置中禁用右键菜单。
为什么有些功能不能用?
一些功能支持特定版本的浏览器(译者注:这是就2006年而言):
- Color picker
- Firefox 2.0
- Opera 9
- Flood fill
- Opera 9
- Save image
- Firefox 2.0
- Opera 9
- Open URL
- Firefox 1.5
- Opera 9
- Latest WebKit
Canvas 对象好用吗?
对那些不需要跨浏览器支持的应用很好用。但在绘画中,最大的问题是,受限于 mousemove 事件的刷新率,你不太容易发现光标的位置,使用喷笔的时候尤其明显。另外,当尺寸变得很大时,速度变得很慢,没有 getPixel() 功能。
技术细节
程序中使用了 5 个 Canvas 对象。
一个主画板,一个是透明画板层浮动在上方显示预览绘画内容,一个隐藏的 Canvas 用来缓存选择的内容,另一个用来缓存反悔状态,一个用在程序标题栏,用来显示渐变色。
其他人的 HTML5 Canvas 实验
Canvascape 3D (用 HTML5 实现简单的第一人称射击游戏)
CanvasGraph (一个 HTML5 Canvas 绘图 JavaScript 类库 )
Image reflections (用 HTML5 Canvas 实现图像倒影)
Canvas Painter (一个更为简单的 Canvas 画图程序)
真正令人赞叹的 HTML 画图程序
如果上面的程序已经让你对 HTML5 的 Canvas 功能感到鼓舞,下面这个画图程序会让你赞叹 。拥有不输桌面的界面体验和流畅 感,在多屏幕电脑上,我甚至有将那些浮动工具面板拖到第二个屏幕的冲动。
演示地址:http://mugtug.com/sketchpad/

本文素材来源:http://canvaspaint.org/#
http://mugtug.com/sketchpad/
中文编译来源:锐商企业CMS 网站内容管理系统 官方网站