‘前端开发’ 分类的存档

从gmail开始,前端总结出了ajax的概念,也让前端开发工程师们得到了更多的重视,前端技能是一个很庞大的体系,W3C标准,Dom结构,Css样式,Javascript编程 ……

6 条评论最近写日期操作的几个JS函数

2010年4月23日
//格式化函数 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))
}

没有评论编码大全 – 前端相关

2010年4月23日


这是我在本周珍珠奶茶会上做的分享。编码的细节太多太多,对于前端工程师,掌握主流常用的编码就可以了,并知晓后端处理URL编码的基本思路以及浏览器在 处理编码问题上的差异性。

ps:补充一点,encodeURIComponent和encodeURI,可以参照玉伯的例子
http://lifesinger.googlecode.com/svn/tr … _test.html

1 条评论如何量身打造一个前端框架

2010年4月15日

转一篇: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,他们就会傻乎乎的开始用了。。。

因此,框架的开发,在于专业、在于坚持、在于团队,三者缺一不可。。。

1 条评论即拷即用:onDOMReady(提取自jQuery.ready)

2010年4月9日

上次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的分享

2 条评论基于 HTML5 的 Windows 画图程序

2010年4月7日

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 网站内容管理系统 官方网站