一、Vibration API ,接受两种类型参数

vibrate (unsigned long time)  
当参数是unsigned long的时候 此时参数表示震动时间。  NotSupportedError 表示当time参数超过规定时间,则抛出异常。
实例:
navigator.vibrate(1000);触屏设备振动1秒钟
 
vibrate (unsigned long[] pattern) 
当参数是unsigned long[] 的时候,此时程序会遍历pattern数组长度,遇到奇数,则该时间为振动时间(毫秒),遇到偶数,则该时间为间隔时间(毫秒)。
NotSupportedError 表示当time参数超过规定时间,则抛出异常。
实例:
Navigator.vibrate([2000,1000,5000]);
此时表示触屏设备振动2秒钟,静止1秒后,再次振动5秒钟。
 
实例:
if ((navigator.vibrate || navigator.webkitVibrate) && window.webkitNotifications) {     
// 用户授权是否允许发布系统消息:
    if(window.webkitNotifications.checkPermission() != 0) {
          window.webkitNotifications.requestPermission(function () {});
    }
} else {
   //提示浏览器不支持此api
}
1、先判断当前的浏览器是否支持开启桌面通知 window.webkitNotifications;
2、如果用户之前允许过桌面通知,则window.webkitNotifications.checkPermission()会返回0;
3、如果用户之前拒绝或是未允许开启桌面通知,可使用window.webkitNotifications.requestPermission(callback);再次弹出询问用户的提示,否则当用户之前拒绝过,按钮点击了也是不会有响应操作的
if (navigator.vibrate) {
       navigator.vibrate(2000);
} else if (navigator.webkitVibrate) {
       navigator.webkitVibrate(2000);
}
检查是否支持vibrate 支持就调用navigator.vibrate或者navigator.webkitVibrate,是用户手机震动2秒钟。
 
二、Geolocation API  定位
 
三、Battery API  电池
通过API主要可以获取电池如下属性:
var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery;
1、battery.charging 是否正在充电 返回值是true时表示正在充电。
2、battery .chargingTime返回完成充电还需要的时间。
3、battery .level  显示电池电量的百分比 1表示满电量。
4、battery.dischargingTime 显示当前电量能使用多长时间。
将自己写的函数注册到这些回调函数里来获取属性的变化信息:
battery.addEventListener("chargingchange", function (e) {
   当充电状态改变的时候会触发此处的函数。
}, false);
battery.addEventListener("chargingtimechange", function (e) {
   当充电还需时间改变的时候会触发此处的函数。
}, false);
battery.addEventListener("dischargingtimechange", function (e) {
   当当前电量能使用多长时间改变时候会触发此处的函数。
}, false);
battery.addEventListener("levelchange", function (e) {
   当电池电量的百分比改变时候会触发此处的函数。
}, false);
 
实例:
if (navigator.battery || navigator.webkitBattery) {
var battery = navigator.battery || navigator.webkitBattery , intervalId = 0;
var batteryWidth = 210 / 1.5 * battery.level;
document.getElementById('_batteryId').style.width = 210 / 1.5 * battery.level + "px";
if (battery.level < 1) {
    document.getElementById('_batteryTxtId').innerHTML = "电量未满,插上充电器试试";
} else if (battery.level == 1) {
    document.getElementById('_batteryTxtId').innerHTML = "电量满,不需要充电";
}
battery.onchargingchange = function () {//当电池的充电状态改变后会触发此函数
    clearInterval(intervalId);
    document.getElementById('_batteryId').style.width = 210 / 1.5 * battery.level + "px";
    batteryWidth = 210 / 1.5 * battery.level;
    if (battery.charging && battery.level < 1) {
        intervalId = setInterval(loop, 30);  //每过30ms改变下电池显示电量 每次电量宽度加2像素值
    }
    document.getElementById('_batteryId').style.width = 210 / 1.5 * battery.level + "px";
    if (battery.level < 1) {
        document.getElementById('_batteryTxtId').innerHTML = "电量未满,插上充电器试试";
    } else if (battery.level == 1) {
        document.getElementById('_batteryTxtId').innerHTML = "已充满,不需要充电了";
    }
};
battery.onlevelchange = function () {//当电池电量变化时候触发此处函数
    document.getElementById('_batteryId').style.width = 210 / 1.5 * battery.level + "px";
};
if (battery.charging && battery.level < 1) {
    intervalId = setInterval(loop, 30);//每过30ms改变下电池显示电量
}
function loop() {
    if (battery.level == 1) {
        clearInterval(intervalId);
    } else {
        if (batteryWidth >= 210 / 1.5) { //当电量超过1时候,电量显示为实际电量
            batteryWidth = 210 / 1.5 * battery.level;
        } else {
            batteryWidth += 2;
        }
    }
    if (battery.level < 1) {
        document.getElementById('_batteryTxtId').innerHTML = "充电中...";
    } else if (battery.level == 1) {
        document.getElementById('_batteryTxtId').innerHTML = "电量已满";
    }
    document.getElementById('_batteryId').style.width = batteryWidth + "px";
}
}
 
四、网页拍照   navigator.getUserMedia
调用此接口会提示用户需要权限去使用像摄像头或麦克风之类的媒体设备.如果用户提供了这个权限,successCallback函数会被调用,且接收一个LocalMediaStream 对象作为参数.
// 设置事件监听器  
window.addEventListener("DOMContentLoaded", function() {  
  // 获取元素  
  var canvas = document.getElementById("canvas"),  
    context = canvas.getContext("2d"),  
    video = document.getElementById("video"),  
    videoObj = { "video": true },  
    errBack = function(error) {  
      console.log("Video capture error: ", error.code);   
    };  
  
  // 设置video监听器  
  if(navigator.getUserMedia) { // Standard  
    navigator.getUserMedia(videoObj, function(stream) {  
      video.src = stream;  
      video.play();  
    }, errBack);  
  } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed  
    navigator.webkitGetUserMedia(videoObj, function(stream){  
      video.src = window.webkitURL.createObjectURL(stream);  
      video.play();  
    }, errBack);  
  }  
}, false);  
 
五、指南针,平衡信息    Deviceorientation
Deviceorientation它会在加速度传感器检测到设备在方向上产生变化时触发。通过处理该事件传来的数据信息,使针对由于用户移动设备引起旋转和仰角变化的行为设计交互响应成为可能。
 
六、全屏API
// 找到适合浏览器的全屏方法  
function launchFullScreen(element) {  
  if(element.requestFullScreen) {  
    element.requestFullScreen();  
  } else if(element.mozRequestFullScreen) {  
    element.mozRequestFullScreen();  
  } else if(element.webkitRequestFullScreen) {  
    element.webkitRequestFullScreen();  
  }  
}  
// 启动全屏模式  
launchFullScreen(document.documentElement); // the whole page  
launchFullScreen(document.getElementById("videoElement")); // any individual element  
 
七、页面可见性API(Page Visibility API) 返回用户当前浏览的页面或标签的状态变化
// 设置隐藏属性和可见改变事件的名称,属性需要加浏览器前缀  
// since some browsers only offer vendor-prefixed support  
var hidden, state, visibilityChange;   
if (typeof document.hidden !== "undefined") {  
  hidden = "hidden";  
  visibilityChange = "visibilitychange";  
  state = "visibilityState";  
} else if (typeof document.mozHidden !== "undefined") {  
  hidden = "mozHidden";  
  visibilityChange = "mozvisibilitychange";  
  state = "mozVisibilityState";  
} else if (typeof document.msHidden !== "undefined") {  
  hidden = "msHidden";  
  visibilityChange = "msvisibilitychange";  
  state = "msVisibilityState";  
} else if (typeof document.webkitHidden !== "undefined") {  
  hidden = "webkitHidden";  
  visibilityChange = "webkitvisibilitychange";  
  state = "webkitVisibilityState";  
}  
// 添加一个标题改变的监听器  
document.addEventListener(visibilityChange, function(e) {  
  // 开始或停止状态处理  
}, false);  
 
八、预加载内容 Link Prefetching 
<!-- full page -->  
<link rel="prefetch" href="http://davidwalsh.name/css-enhancements-user-experience" />  
<!-- just an image -->  
<link rel="prefetch" href="http://davidwalsh.name/wp-content/themes/walshbook3/images/sprite.png" />  
 
参考:

HTML5 设备上的API的更多相关文章

  1. HTML5关于上传API的一些使用(上)

    HTML5提供了很多有用的API,其中就包括上传的API,XMLHttpRequest2.0,在HTML5时代之前,需要进行二进制的上传一般都会才用flash的方案,但是当XMLHttpRequest ...

  2. HTML5关于上传API的一些使用(中)

    上一次写了关于HTML的上传API,XMLHttpRequest2.0的上传方式,以及HTML5中上传之前本地的预览,包括对于图片以及部分信息的预 览.这次我们就讲下HTML5中关于上传的一些各种个性 ...

  3. AJAX文件上传实践与分析,带HTML5文件上传API。

    对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...

  4. HTML5关于上传API的一些使用(下)

    通过前面两篇的分享,我们已经搞定了单个文件的普通的上传,包括文件预览,图片预览,上传速度等前端界面的显示,这次我们来谈谈关于>XMLHttpRequest2.0在界面之后假如才用分片上传能做到一 ...

  5. 如何在移动设备上调试html5开发的网页

    在我们用phoengap+html5做的移动app中,经常遇到的问题就是 本地网页兼容但是到了app出现不兼容的情况,原因是手机端页面,大多运行在webkit内核的浏览器上,但还是会因平台.厂商的不同 ...

  6. HTML5的设计目的是为了在移动设备上支持多媒体

    HTML5的设计目的是为了在移动设备上支持多媒体

  7. IT兄弟连 HTML5教程 在移动设备上设置原始大小显示

    在iPhone系列和iPod Touch中使用的是Safari浏览器,它支持前面介绍的媒体查询表达式.例如,使用iPhone 320px×480px的分辨率去访问我们前面的布局示例,却无法得到我们想看 ...

  8. HTML5语音合成Speech Synthesis API简介

    by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5865本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意 ...

  9. html5获取地理位置信息API

    html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...

随机推荐

  1. Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...

  2. TOP命令详解(负载情况)

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  3. spring事务不会进行回滚的情况

    if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Excep ...

  4. 快速双边滤波 附完整C代码

    很早之前写过<双边滤波算法的简易实现bilateralFilter>. 当时学习参考的代码来自cuda的样例. 相关代码可以参阅: https://github.com/johng12/c ...

  5. Naive and Silly Muggles hdu4720

    Naive and Silly Muggles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  6. form表单中enctype="multipart/form-data"的传值问题

    form表单中enctype="multipart/form-data"的传值问题!! Form表单中enctype="multipart/form-data" ...

  7. ch2-vue实例(new Vue({}) 属性与方法 声明周期)

    Vue 实例1 每个Vue.js都是通过创建一个Vue的根实例启动的 var vm = new Vue({}) 2 扩展Vue构造器,用预定义选项创建可复用的组件构造器 var MyComponent ...

  8. webpack 的使用2

    实际项目中的配置 要加__dirname 不然会报错 注意path  /dist 前不要加点 结果 将两个文件打包在一起 结果 传入对象 并且单独打包 name为key 加上本次打包的hash has ...

  9. sqlserver 使用脚本创建Sql Server代理作业

    use master GO /* --开启sql server代理 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_con ...

  10. iOS 记录近期遇到的几个bug

    1. actionSheet与pickerView 不兼容 发生环境:ios 9以上,其他无测试. actionSheet与pickerView在一起使用时,当actionSheet弹出后,紧接着再弹 ...