首页 > 编程语言 > 详细

新兴的API(javascript)

时间:2019-04-05 23:42:09      阅读:148      评论:0      收藏:0      [点我收藏+]

requestAnimationFrame()

每次浏览器重绘之前会调用这个方法!!!

它接收一个参数,就是回调函数;

它可以保证在最佳的间隔时间调用传入的回调函数,以达到让屏幕产生最流畅的动画效果。每次调用这个api它只会调用一次回调函数,并且给回调函数传入间隔的时间(毫秒)。很适合用js做动画。

下面这个方法可以打印出不同浏览器两次重绘的间隔时间(毫秒):

      (function(){
            function draw(timestamp){
                  // 计算两次重绘的时间间隔
                  var drawStart=(timestamp||Date.now()),
                      diff=drawStart-startTime;
                  //使用diff确定下一步的重绘时间
                  // console.log(diff);//这就是当前浏览器当前重绘的时间间隔(毫秒)
                  // 把startTime重写为这一次的绘制时间
                  startTime=drawStart;
                  // 重绘UI
                  requestAnimationFrame(draw);
            }
            var requestAnimationFrame=window.requestAnimationFrame||
                                      window.mozRequestAnimationFrame||
                                      window.webkitRequestAnimationFrame||
                                      window.msRequestAnimationFrame,
                startTime=window.mozAnimationStartTime||Date.now();
                console.log(startTime);
            requestAnimationFrame(draw);
      })();

 以上代码只兼容IE、chrome、firefox浏览器

Page Vilibility API

用于确认页面是否被隐藏。

document.hidden: 表示页面是否隐藏的布尔值。页面隐藏包含页面在后台标签中或者浏览器最小化。

document.visibilityState:它有以下几种可能的值

visible : 页面内容至少是部分可见。 在实际中,这意味着页面是非最小化窗口的前景选项卡。

hidden : 页面内容对用户不可见。 在实际中,这意味着文档可以是一个后台标签,或是最小化窗口的一部分,或是在操作系统锁屏激活的状态下。

prerender : 页面内容正在被预渲染且对用户是不可见的(被document.hidden当做隐藏). 文档可能初始状态为prerender,但绝不会从其它值转为该值。 注释:浏览器支持是可选的。

unloaded : 页面正在从内存中卸载。 注释:浏览器支持是可选的。

visibilitychange:这是一个document可以监听的事件,当文档从可见变为不可见或者从不可见变为可见时,触发该事件。

 

 

Geolocation API:(只有在服务器运行才能生效、协议必须是https)
这个api的实现是navigator.geolocation,这个对象包含3个方法:
getCurrentPosition(成功回调函数,可选的失败回调函数,可选的选项对象):

成功回调函数会接收到一个Position对象参数,给对象有两个属性:coords和timestamp:

coords对象中将包含下列与位置相关的信息:

latitude:以十进制表示的纬度。

longitude:以十进制表示的经度。

accuracy:经、纬度坐标的经度,以米为单位。

有些浏览器还可能会在coords对象中提供如下属性:

altitude:以米为单位的海拔高度,如果没有相关数据则值为null。

altitudeAccuracy:海拔高度的精度,以米为单位,数值越大越不精确。

heading:指南针的方向,0表示正北,值为NAN表示没有检测到数据。

speed:速度,即每秒移动多少米,如果没有相关数据则值为null。

在失败回调函数在被调用的时候也会接收到一个参数,这个参数是一个数组,数组中包含了对象,对象包含两个属性:message和code。其中,message属性中保存着给人看的文本信息,解释为什么会出错。而code保存着一个数值。

第三个参数时一个选项对象:可以设置的选项有三个:

enableHighAccuracy:是一个布尔值,表示必须尽可能使用最精准的位置信息。

timeout:以毫秒数表示的等待位置信息的最长时间。

maximumAge:表示上一次取得的坐标信息的有效时间,以毫秒表示,如果时间到则重新取得新坐标信息。

例子:
      function geolocationSupport(){
            if(!navigator.geolocation){
                  alert("你的浏览器不支持HTML5 Geolocation");
            }else{
                  getCurrentPosition();
            }
      }
      function getCurrentPosition(){
            var options={
                  enableHighAccuracy:true,
                  timeout:60000,
                  maximumAge:60000
            }
            navigator.geolocation.getCurrentPosition(success,error,options)
      }
      function success(position)
      {
            var x=position.coords.longitude;
            var y=position.coords.latitude;
            alert("经度为:"+x+"纬度为:"+y);
      }
      function error(err)
      {
            var errorTypes={
                  1:"用户拒绝定位服务",
                  2:"获取不到定位信息",
                  3:"获取定位信息超时"
            }
            alert(errorTypes[err.code]);
      }
      window.onload=geolocationSupport();

 File API:

当文件输入字段选择了一或多个文件时,文件输入元素的files集合中将包含一组File对象,每个File对象对应着一个文件。每个File对象都有下列只读属性:

name:本地文件系统中的文件名。

size:文件的字节大小。

type:字符串,文件的MIME类型。

lastModifiedDate:字符串,文件上一次被修改的时间。(chrome)

例如:

    <input type="file" id="file_list" multiple="multiple">  

按ctrl键,可以选择多个文件

      var fileList=document.getElementById("file_list");
      fileList.onchange=function(event){
            var files=event.target.files,
                i=0,
                len=files.length;
                console.log(files);
            while(i<len){
                  console.log(files[i].name+" ("+files[i].type+", "+files[i].size+" bytes");
                  i++;
            }
      }

 FileReader类型

异步

FileReader类型是用来读取文件的,读取的文件需要是文件输入元素的files集合中的File对象。读取后的数据都将保存在实例的result属性中,它的实例用以下几个方法:

readAsText(读取的文件,可选的指定编码类型):以纯文本形式读取文件。

readAsDataURL(读取的文件):读取文件并将文件以数据URL的形式保存在result属性中。

readAsBinaryString(读取的文件) :读取文件并将以一个字符串保存在result属性中,字符串中的每个字符表示一字节。

readAsArrayBuffer(读取的文件):读取文件并将一个包含文件内容的ArrayBuffer保存在result属性中。

由于读取过程是异步的,因此FileReader也提供了几个事件,这几个事件通过实例监听:

progress:是否又读取了新数据,每50ms左右,就会触发一次。它的事件对象有以下几个属性。

  lengthComputable:表示进度信息是否可用的布尔值。

  loaded:表示已经接收的字节数。

  total:表示根据Content-Length响应头部确定的预期字节数。

error:由于种种原因无法读取文件,就会触发error事件。相关的信息将保存到FileReader的error属性中。这个属性中将保存一个对象,该对象只有一个属性code,即错误码。这个错误码是1表示未找到文件,是2表示安全性错误,是3表示读取中断,是4表示文件不可读。

load:文件成功加载后触发这个事件。

如果项中断读取过程,可以调用abort()方法,这样就会触发abort事件。在触发load、error或abort事件后,会触发另外一个事件loadend。

举例:
      var fileList=document.getElementById("file_list");
      fileList.onchange=function(event){
            var info="",
                output=document.getElementById("file_list"),
                progress=document.getElementById("progress"),
                files=event.target.files,
                type="default",
                reader=new FileReader();
            if(/image/.test(files[0].type)){
                  reader.readAsDataURL(files[0]);//若是图片文件,将图片以数据URI的形式保存在result属性中
                  type="image";
            }else{
                  reader.readAsText(files[0]);//若不是图片文件,将文件以文本的形式保存在result属性中
            }

            reader.onerror=function(){//读取失败处理程序
                  output.innerHTML="Could not read file , error code is"+reader.error.code;
            }

            reader.onprogress=function(event){//读取过程事件处理程序大概50ms执行一次
                  if(event.lengthComputable){
                        progress.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;
                  }
                  progress.innerHTML=html;
                  console.log(reader.result);
            }

      }

 

 

 

 

 

 

 

 

 

 

新兴的API(javascript)

原文:https://www.cnblogs.com/fqh123/p/10660261.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!