MDC文档:https://developer.mozilla.org/En/CSS/Media_queries
Opera文档:http://www.opera.com/docs/specs/css/
支持:Firefox 3.5+, Safari 3+, Opera 7+
css变形,有人用这个实现伪3d效果以及旋转效果的jquery插件
-moz-transform: rotate(-45deg) skew(15deg, 15deg); sprite.style['-webkit-transform'] = 'rotate(' + v + 'rad)';w3c标准:http://www.w3.org/TR/css3-2d-transforms/
MDC文档:https://developer.mozilla.org/En/CSS/CSS_transform_functions
webkit博客的介绍: http://webkit.org/blog/130/css-transforms/
支持:Firefox 3.5+, Safari 3.1+
替代/过渡:IE5.5+ Matrix Filter http://msdn.microsoft.com/en-us/library/ms533014(VS.85).aspx
备受期待的css动画,webkit团队提出的草案,transition实现简单的属性渐变,animation定义更复杂的动画效果
transition-property: width; transition-duration: 1s; animation-name: 'diagonal-slide'; animation-duration: 5s; animation-iteration-count: 10; @keyframes 'diagonal-slide' {}w3c标准:http://www.w3.org/TR/css3-transitions/
w3c标准:http://www.w3.org/TR/css3-animations/
webkit博客的介绍:http://webkit.org/blog/138/css-animation/
约翰同学的介绍:http://ejohn.org/blog/css-animations-and-javascript/
支持:Safari 3.1+
能在网页里嵌入任意字体是设计师的梦想不过这里支持的也仅限truetype和opentype
@font-face {}w3c标准:http://www.w3.org/TR/css3-fonts/#font-resources
MSDN文档:http://msdn.microsoft.com/en-us/library/ms530303(VS.85).aspx
MDC文档:https://developer.mozilla.org/en/CSS/@font-face
支持:Firefox 3.5+, Safari 3.1+, Opera 10.0+, IE4.0+
ppk同学维护的文档: http://www.quirksmode.org/css/contents.html
css3.info维护的文档:http://www.css3.info/modules/selector-compat/
一个测试页面:http://westciv.com/iphonetests/
简洁的持久存储,键值对的形式
window.localStorage window.sessionStorage //可跨域,标签页关掉就清空w3c标准:http://www.w3.org/TR/webstorage/
ppk同学维护的兼容性列表:http://www.quirksmode.org/dom/html5.html#localstorage
MDC文档:https://developer.mozilla.org/en/DOM/Storage
MSDN文档:http://msdn.microsoft.com/en-us/library/cc197062(VS.85).aspx
支持:Firefox 3.5+, Safari 4.0+, IE 8.0+
用一个manifest文件缓存静态资源(图片,css, js之类)在离线状态下使用,不是结构化数据
html manifest="foo.manifest" CACHE MANIFEST index.html style/default.css images/Logo.pngw3c标准:http://www.w3.org/TR/offline-webapps/#offline
MDC文档:https://developer.mozilla.org/en/Offline_resources_in_Firefox
支持:Firefox 3.5+
本地数据库,支持sql,最早是google gears实现,现在的w3c草案的编辑也是google的工程师但奇怪的是,gears的api跟现在的草案不兼容,chrome甚至为了保留捆绑的gears的数据库api而删除了webkit实现的html5 api而google在iphone上实现gmail离线功能的时候又采用webkit的api真纠结
var db = window.openDatabase("notes", "", "The Example Notes App!", 1048576); db.transaction(function(tx) { tx.executeSql(‘SELECT * FROM Notes’, [], function(tx, rs) {}); });w3c标准:http://www.w3.org/TR/offline-webapps/#sql
webkit博客的介绍:http://webkit.org/blog/126/webkit-does-html5-client-side-database-storage/
iphone的文档:http://developer.apple.com/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/UsingtheJavascriptDatabase/UsingtheJavascriptDatabase.html#//apple_ref/doc/uid/TP40007256-CH3-SW1
支持:Safari 3.1+
替代/过渡:Gears http://code.google.com/p/gears/wiki/Database2API
多线程,在后台执行复杂运算,不能操作dom,线程之间通过消息事件通信
var myWorker = new Worker('my_worker.js'); myWorker.onmessage = function(event) { event.data }; myWorker.postMessage(str);w3c标准:http://www.w3.org/TR/workers/
MDC文档:https://developer.mozilla.org/En/Using_web_workers
支持:Firefox 3.5+
替代/过渡:Gears http://code.google.com/p/gears/wiki/HTML5WorkerProposal
地理api
window.navigator.geolocationw3c标准:http://www.w3.org/TR/geolocation-API/
MDC文档:https://developer.mozilla.org/En/Using_geolocation
支持:Firefox 3.5+
替代/过渡:Gears http://code.google.com/p/gears/wiki/GeolocationAPI
原生拖拽事件
ondragstart ondrag ondragend //拖拽过程中 ondragenter ondragover ondragleave ondropw3c标准:http://www.w3.org/TR/html5/editing.html#dnd
MDC文档:https://developer.mozilla.org/En/DragDrop/Drag_and_Drop
apple文档:http://developer.apple.com/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/DragAndDrop.html#//apple_ref/doc/uid/30001233
支持:Firefox 3.5+, Safari 2.0+, Chrome 1.0+, IE 5.0+
用html标签来嵌入视频音频的好处并非是开源格式,而是开放性,让多媒体可以与其他页面元素交互,或者用页面技术去跟视频mashup,这种随意组合和交互的能力是web技术兴盛的基石,也是像flash这类封闭RIA容器最大的缺点。
video controls source src=zombie.ogg type=video/ogg/ source src=zombie.mp4″ type=video/mp4″/ /videoMDC文档:https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox
webkit博客的介绍:http://webkit.org/blog/140/html5-media-support/
支持:Firefox 3.5+, Safari 3.0+, Chrome 3.0+
替代/过渡:用video标签嵌套embed http://hacks.mozilla.org/2009/06/html5-video-fallbacks-markup/
apple发明,最早应用于dashboard,目前主流的js图像技术,mozilla已经在实现OpenGL ES标准的Canvas 3D了,另外据说ie team为支持canvas做了大量工作实际上canvas api相当底层,特别是交互方面,不如svg直观,所以出现了很多封装它的库
var ctx = $('#canvas')[0].getContext("2d"); ctx.fillStyle = "#00A308"; ctx.beginPath(); ctx.arc(220, 220, 50, 0, Math.PI*2, true); ctx.closePath(); ctx.fill();MDC文档:https://developer.mozilla.org/en/Canvas_tutorial
支持:Firefox 1.5+, Safari 2.0+, Chrome 1.0+, Opera 9.0+
替代/过渡:excanvas.js http://code.google.com/p/explorercanvas/
w3c标准:http://www.w3.org/TR/SVG12/
IBM DW教程:http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84896
支持:Firefox 1.5+, Safari 3.0+, Chrome 1.0+, Opera 9.0+
替代/过渡:raphael.js http://raphaeljs.com/
主要是增加跨域能力以及请求过程中的事件
w3c标准:http://www.w3.org/TR/XMLHttpRequest2/
MDC文档:https://developer.mozilla.org/En/Using_XMLHttpRequest#Monitoring_progress
XDomainRequest (XDR)
MSDN文档:http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx
支持:Firefox 3.5+(实现了部分), IE 8.0+(实现了部分)
千呼万唤的跨域访问控制,目前firefox3.5和ie8有一些不同,ie8搞的XDR和XDM我也不知道是不是准备提交给w3c标准化的东西
Access-Control-Allow-Origin: http://foo.examplew3c标准:http://www.w3.org/TR/cors/
MDC文档:https://developer.mozilla.org/En/HTTP_Access_Control
Cross-document Messaging (XDM)
MSDN文档:http://msdn.microsoft.com/en-us/library/cc197057(VS.85).aspx
支持:Firefox 3.5+, IE8.0+
Firefox和ActionScript3早就实现了的东西不过其实现在json这么流行,有没有E4X好像都无所谓了~(瞎说的,其实在js代码里直接写dom对象而不是html字符串,会方便很多)
MDC文档:https://developer.mozilla.org/en/E4X
支持:Firefox 1.5+
原生的JSON支持,速度和安全性都比eval强一百倍亚一百倍,另外要注意Douglas Crockford的json2.js是一个用js实现的js解释器,所以安全性更好
JSON.parse( text, translate ) JSON.stringify( obj, translate ) String.prototype.toJSON Boolean.prototype.toJSON Number.prototype.toJSON Date.prototype.toJSONMDC文档:http://blog.mozilla.com/webdev/2009/02/12/native-json-in-firefox-31/
MSDN文档:http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx
支持:Firefox 3.5+, IE8+
替代/过渡:json2.js http://www.json.org/json2.js
js1.6里实现的数组方法,主要是forEach, map, fliter这几个函数式编程里非常重要的方法,还有反向查询
Array.prototype.indexOf( str ) Array.prototype.lastIndexOf( str ) Array.prototype.every( fn ) Array.prototype.some( fn ) Array.prototype.filter( fn ) Array.prototype.forEach( fn ) Array.prototype.map( fn )MDC文档:https://developer.mozilla.org/en/New_in_JavaScript_1.6#Array_extras
支持:Firefox2.0+, Safari 3.0+, Google Chrome 1.0+, Opera 9.5+
替代/过渡:都可以通过扩展Array.prototype来模拟
区分数组和对象
Array.isArray([]); // true支持:无
替代/过渡:Array.isArray = function(a){ return Object.prototype.toString.call(a) === [object Array];};
用GOOGLE I/O演讲里的话来说:更鲁棒(robust)的对象系统
约翰同学的讲解:http://ejohn.org/blog/objectgetprototypeof/
支持:Firefox3.5
替代/过渡:object.__proto__ 或 object.constructor.prototype
约翰同学的讲解:http://ejohn.org/blog/ecmascript-5-objects-and-properties/
支持:无
替代/过渡:Object.create和Object.keys可以自己实现
对象属性的访问控制
Object.getOwnPropertyDescriptor( obj, prop ) Object.defineProperty( obj, prop, desc ) Object.defineProperties( obj, props ) desc = { value: true, writable: false, //修改 enumerable: true, //for in configurable: true, //删除和修改属性 get: function(){ return name; }, set: function(value){ name = value; } }约翰同学的讲解:http://ejohn.org/blog/ecmascript-5-objects-and-properties/
支持:无
替代/过渡:Object.defineProperties其实相当于jQuery.extend,用来实现Mixin
python和ruby里都有的属性访问方法
obj = { get innerHTML() { return ; }, set innerHTML(newHTML) { } };MDC文档:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Creating_New_Objects/Defining_Getters_and_Setters
支持:Firefox 2.0+, Safari 3.0+, Google Chrome 1.0+, Opera 9.5+
替代/过渡:
非标准,Firefox1.5里的旧方法
HTMLElement.prototype.__defineGetter__("innerHTML", function () {}); HTMLElement.prototype.__defineSetter__("innerHTML", function (val) {});支持:Firefox 2.0+, Safari 3.0+, Google Chrome 1.0+, Opera 9.5+
标准
Object.defineProperty(document.body, "innerHTML", { get : function () {} });MSDN文档:http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx
支持:IE8+ (只能对DOM使用)
ES5的严格模式,删除了旧版本中容易引起问题的元素,并且会显式的报错,方便调试
"use strict"; //以下情况下抛出异常 //对未定义的变量赋值 //操作被设置为不可写,不可配置或不可扩充的属性 //删除变量,函数,参数 //在对象直接量里重复定义属性 //eval做关键字,在eval的字符串里定义变量 //覆写arguments //使用arguments.caller和arguments.callee(匿名函数必须具名才能引用自己) //(function(){ ... }).call( null ); // Exception //使用with约翰同学的讲解:http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
支持:无
替代/过渡:从现在开始养成严谨的编程习惯
传递函数的引用时,绑定this
Function.prototype.bind(thisArg, arg1, arg2....) /支持:无
替代/过渡:prototype http://www.prototypejs.org/api/function/bind
ISO-formatted dates
Date.prototype.toISOString() // Prints 2009-05-21T16:06:05.000TZ支持:无
替代/过渡:datejs http://code.google.com/p/datejs/
支持:Firefox3.5
替代/过渡:各种正则实现 http://blog.stevenlevithan.com/archives/faster-trim-javascript
===================废话又开始的分割线=======================
其实我把这个东西发出来是希望能促进创新的氛围,让更多人认识到很多新技术已经进入到实用阶段。
如果只是想做个实验性的webgame,或是只能用于特定平台的应用(比如iphone,greasemonkey),firefox3.5+webkit的支持就已经足够罢。
如果不能无视主流平台,有很多技术能让你gracefully degrade(优雅的退化)或者选取不同的方法实现兼容的接口。
如果你等不及IE x在若干年后实现xx,希望提前享受福利,有些技术的设计原则就是让你能在没有native支持的情况下可以自己实现一模一样的功能或语法糖(syntactic sugar),比如ES5对象的继承和访问控制,从ES4/ActionScript3时期那些老土的关键词(class extands private static)改成了Object.create(p, attrs).defineProperty(o, n, attrs).defineProperties(o, attrs).freeze().getOwnPropertyNames().map(fn),不会只是为了酷炫罢
很多人都喜欢抱怨我这辈子都没机会用HTML5,但是只要把视线从自己脚下那巴掌大块地移开看看别处,会发现世界其实一直都在改变喔XD