25. 新兴API
25.1 requestAnimationFrame()
25.2 Page Visibility
页面最小化,或隐藏在其他标签后
- 属性
document.hidden
Booleandocument.visibilityState
—> Chrome(hidden, visible, prerender)
- 事件
visibilitychange
事件
25.3 Geolocation
请求用户同意共享位置信息
navigator.geolocation
getCurrentPosition(successCallBack, failedCallBack, option)
- 返回
Position
对象有两个属性coords
,timestamp
coords
包含具***置信息latitude
纬度longtitude
经度accuracy
经纬度精度/米altitude
海拔altitudeAccuracy
海拔精度/米heading
指南针方向speed
速度
- 选项对象可设置属性
enableHighAccuracy
保证高精度timeout
最长等待时间maximumAge
有效期
watchPosition()
25.4 File
File
对象name
size
type
lastModifiedDate
FileReader
异步读取文件机制,想象成XMLHttpRequest,区别是读取文件系统,而非远程服务器- 方法
readAsText(file, encoding)
readAsDataURL(file)
readAsBinaryString(file)
readAsArrayBuffer(file)
abort()
- 事件
progress
- 每隔50ms左右触发一次
lengthComputable
,loaded
,total
- 每隔50ms左右触发一次
error
load
loadend
- 方法
- 读取部分内容
slice(startByte, length)
- 返回Blob实例,Blob是File的父类型
- 对象URL
- 对象URL也被称为blob url,指的是引用保存在File或Blob中数据的URL。
- 使用对象URL的好处是可以不必把文件内容读取到JavaScript中而直接使用文件内容。
- 只要在需要文件内容的地方提供对象URL即可。
window.URL.createObjectURL()
返回一个字符串,指向一块内存地址window.URL.createObjectURL(files[0])
- 形如
"blob:null/a53e2e93-c401-4e4b-b1ec-638c612c677b"
- 引用的地方
[外链图片转存失败(img-IYI9dxDL-1562168626657)(blob:null/a53e2e93-c401-4e4b-b1ec-638c612c677b)]
- 手动释放对象URL内存
window.URL.revokeObjectURL(url)
- 读取拖放文件
event.dataTransfer.files
- 使用XHR上传文件
- 上传文件,而不是读取文件内容
FormData
var data = new FormData(); data.append(file0);
25.5 Web Timing
- Web计时机制的核心是
window.performance
对象,全面了解页面被加载到浏览器的阶段performance.navigation
redirectCount
type
performance.timing
软件纪元1970-1-1navigationStart
unloadEventStart
unloadEventEnd
redirectStart
fetchStart
开始GET页面的时间domainLookupStart
开始查询当前页面DNS的时间connectStart
浏览器尝试连接服务器secureConnectionStart
SSL方式连接服务器requestStart
responseStart
domLoading
domInteractive
domContentLoadedEventStart
domComplete
loadEventStart
25.6 Web Workers
- 使用Worker
var worker = new Worder("stufftodo.js");
worker.postMessage("start!");
worker.onmessage = function(event){ var data = event.data;}
worker.onerror = function(event){console.log(event.filename + event.lineno + event.message)}
- 关于Worker,最重要的是要知道他所执行的JavaScript代码完全在另一个作用域中,与当前网页代码不共享作用域。
- Worker中的代码不能访问DOM,也无法更改页面外观。
- 比较耗时的操作,转交给Worker就不会阻塞用户界面。
<input type="file" onchange="changeHandler()" />
<script> function changeHandler(){ var files = window.event.target.files; var url = window.URL.createObjectURL(files[0]); var worker = new Worker(url); } </script>