在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
略