HTML5提供的新功能概要
classList:现在element加入了classList属性,用于访问其class列表,比如想要切换一个目标的css big类,则调用target.classList.toggle("big")即可
storage:使用localStorage可以保存数据至本地,用于不同时间不同窗口间的通信,而sessionStorage则是临时保存数据,当关闭该页面时清空。storageEvent可以用于各个订阅事件.
addEvent(window, 'storage', function (event) { if (event.key == 'storage-event-test') { output.innerHTML = event.newValue; } });
history API:
A) history.pushState(data, title [, url]):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为当前页地址;
B) history.replaceState(data, title [, url]) :更改当前的历史记录,参数同上;
C) history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样;
D) window.onpopstate:响应pushState或replaceState的调用;
有 了这几个新的API,针对支持的浏览器,我们可以构建用户体验更好的应用了。就像Facebook相册,虽然是AJAX的方式,但用户可以直接复 制页面地址分享给好友,好友打开看到的就是AJAX加载的数据,做到了书签化。当然这里面需要做的工作远不是说的这么简单。
B) history.replaceState(data, title [, url]) :更改当前的历史记录,参数同上;
C) history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样;
D) window.onpopstate:响应pushState或replaceState的调用;
有 了这几个新的API,针对支持的浏览器,我们可以构建用户体验更好的应用了。就像Facebook相册,虽然是AJAX的方式,但用户可以直接复 制页面地址分享给好友,好友打开看到的就是AJAX加载的数据,做到了书签化。当然这里面需要做的工作远不是说的这么简单。
data-set: 现在每个element可以有若干个以data开头的attribute,比如data-height可以用element.dataset.height来访问
file API:在html5里,我们可以使用fileAPI来有限访问本地文件系统,构建诸如文件拖放至浏览器进行预览与上传之类的功能
web socket:聊天、页游...后台可以用node.js
placeholder:搜索框里显示一行提示,这个本来要用js实现的,现在简单的变成了一个attr
canvas:没啥好说的,绘图
video:视频,flash不再必须,不知道性能和功能怎么样
content editable:通过设置一个div属性contenteditable="true",可以简单的使该区域变得可以编辑,结合localStorage,编辑文档并临时保存至本地不再是神话,但是在chrome16上进行测试发现可编辑区域中文输入法有问题,可以粘贴中文但不能直接输入...
geolocation:访问你所在的地理位置哦,需要用户同意
if (navigator.geolocation){ navigator.geolocation.getCurrentPosition(function(position){ alert("latitude:" + position.coords.latitude + "longitude:" + position.coords.longitude); }, function(msg){ }); }
postMessage:两个iframe间使用postMessage来通讯,可以同域甚至跨域
drag&drop:再也不用js实现拖拽了,一句话draggable=“true”
online&offline:现在window多了两个event,online和offline,用法自己琢磨吧,貌似bug还很多,可以用来让网页支持离线模式
web sql:web上执行sql呗,这个需求难道来自不愿使用分层架构的web开发者?
var db = openDatabase('foo', '1.0', 'foo', 2 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)'); tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "foobar")'); document.querySelector('#status').innerHTML = '<p>foo created and row inserted.</p>'; }); db.transaction(function (tx) { tx.executeSql('DROP TABLE foo'); // known to fail - so should rollback the DROP statement tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "foobar")'); }, function (err) { document.querySelector('#status').innerHTML += '<p>should be rolling back caused by: <code>' + err.message + '</code></p>'; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM foo', [], function (tx, results) { document.querySelector('#status').innerHTML += '<p>found rows (should be 1): ' + results.rows.length + '</p>'; }, function (tx, err) { document.querySelector('#status').innerHTML += '<p>failed (rollback failed): <em>' + err.message + '</em></p>'; document.querySelector('#status').className = 'error'; }); });
web worker:类似form编程中的background worker,伪多线程式的执行后台计算,不卡死前台UI。但在chrome16中测试发现初始化时仍然有一段时间界面失去响应
details:使用details标签,可以由浏览器自动将其内容隐藏,而只是显示summary,前端动画可以不用js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述