在js中建立动画的典型方式就是用setInterval方法控制全部动画:html
(function() { function animations() { //animations... } setInterval(animations, 100); })()
最平滑动画的最佳循环间隔是100ms/60,约为17ms;大多数电脑显示器的刷新频率是60Hz。git
可是若是UI线程繁忙,好比忙于处理用户操做,那么即便把代码加入到列队也不会当即执行。web
CSS的动画优点在于浏览器知道动画何时开始,所以会计算出正确的循环间隔,在恰当的时候刷新UI,而对于JavaScript动画,浏览器无从知晓何时开始。浏览器
目前,W3C已经着手起草requestAnimationFrame()
API。app
该API包括如下三个部分:dom
document.hidden
:是否隐藏函数
document.visibilityState
:4个可能的状态值fetch
后台标签或最小化动画
前台标签线程
实际页面隐藏,但用户看到页面预览
屏幕外执行预渲染
visibilitychange
事件
如:
document.addEventListener("visibilitychange", function () { console.log(document.hidden); });
navigator.geolocation
这个对象包括三个方法:
getCurrentPosition
:接收3个参数(成功回调函数、可选的失败回调函数、可选的选项对象)
成功回调函数会接收到一个Position
对象参数,该对象有两个属性:coords
和timestamp
。
coords
:对象包括latitude
和longitude
以及accuracy
失败回调函数接收error
对象
error对象有code
和message
两个属性
可选对象接收一个对象:对象内容有enableHighAccuracy
、timeout
以及maximumAge
watchPosition
:该方法接收的参数与上面的一致。配合clearWatch方法使用,相似setTimeout和clearTimeout
clearWatch
如:
navigator.geolocation.getCurrentPosition(function(position) { do_something(position.coords.latitude, position.coords.longitude); //第一个参数为成功的回调函数 }); navigator.geolocation.getCurrentPosition(function(position) { console.log(position.coords.latitude); console.log(position.coords.timestamp); }, function(err) { //第二个参数为失败的回调函数 console.log("Error code: " + err.code); console.log("Error message: " + err.message); }); navigator.geolocation.getCurrentPosition(function(position) { console.log(position.coords.latitude); console.log(position.coords.timestamp); }, function(err) { console.log("Error code: " + err.code); console.log("Error message: " + err.message); }, { //第三个参数接收对象 enableHighAccuracy: true, timeout: 1000, maximumAge: 30000 });
HTML5 DOM中添加了元素files集合,经过文件输入字段选择一个或多个文件,files集合中将包括一组File对象,每一个File对象对应着一个文件,每一个File对象有下面的只读属性:
name
:本地文件系统中的文件名
size
:文件的字节大小
type
:字符串,文件的MIME类型
lastModifiedDate
:字符串,上次文件被修改的事件
如:
var files = document.getElementById("files"); files.onchange = function () { var list = event.target.files; //FileList对象 // console.log(list); //name: lastModified: lastModifiedDate: webkitRelativePath: for (var i = 0, len = list.length; i < len; i++) { console.log("name: " + list[i].name + "; type: " + list[i].type + "; size: " + list[i].size + "bytes"); //name: opening.png; type: image/png; size: 324991bytes }; };
浏览器都支持前两个方法:
readAsText;
readAsDataURL
readAsBinaryString
readAsArrayBuffer
以下例子:
var files = document.getElementById("files"); files.onchange = function() { var files = event.target.files, info = "", output = document.getElementById("output"), type = "default", reader = new FileReader(); if (/image/.test(files[0].type)) { reader.readAsDataURL(files[0]); type = "image"; } else { reader.readAsText(files[0]); type = "text"; } reader.onerror = function () { output.innerHTML = "Could not read, error: " + reader.error.code; }; reader.onprogress = function () { if (event.lengthComputable) { output.innerHTML = event.loaded + "/" + event.total; } }; reader.onload = function () { var html = ""; switch (type) { case "image": html = "<img src=" + reader.result + ">"; break; case "text": html = reader.result; break; } output.innerHTML = html; }; };
若是想中断则须要调用abort方法。
Blob
的实例,slice()
方法
blob.slice(startByte, length)
引用保存在File或Blob中数据的URL:
window.URL.createObjectURL()
方法
要释放内存则把对象URL传给:
window.URL.revokeObjectURL()
方法
var droptarget = document.getElementById("drop"); droptarget.addEventListener("dragenter",function () { event.preventDefault(); }); droptarget.addEventListener("dragover",function () { event.preventDefault(); }); droptarget.addEventListener("drop",function () { event.preventDefault(); var file = event.dataTransfer.files[0]; console.log(file.name) });
在drop事件中,能够经过event.dataTransfer.files
读取文件信息。
略
data = new FormData(); ... data.append("file" + i, files[i]); ... xhr.send(data);
Web Timing API
window.performance
对象
PerformanceNavigation.redirectCount
type
performance.timing
属性
navigationStart
unloadEventStart
unloadEventEnd
redirectStart
redirectEnd
fetchStart
domainLookupStart
domainLookupEnd
connectStart
connectEnd
secureConnectionStart
requestStart
responseStart
responseEnd
domLoading
domInteractive
domContentLoadedEventStart
domContentLoadedEventEnd
domComplete
loadEventStart
loadEventEnd
toJSON
略