一、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的一些使用(上)
HTML5提供了很多有用的API,其中就包括上传的API,XMLHttpRequest2.0,在HTML5时代之前,需要进行二进制的上传一般都会才用flash的方案,但是当XMLHttpRequest ...
-
HTML5关于上传API的一些使用(中)
上一次写了关于HTML的上传API,XMLHttpRequest2.0的上传方式,以及HTML5中上传之前本地的预览,包括对于图片以及部分信息的预 览.这次我们就讲下HTML5中关于上传的一些各种个性 ...
-
AJAX文件上传实践与分析,带HTML5文件上传API。
对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...
-
HTML5关于上传API的一些使用(下)
通过前面两篇的分享,我们已经搞定了单个文件的普通的上传,包括文件预览,图片预览,上传速度等前端界面的显示,这次我们来谈谈关于>XMLHttpRequest2.0在界面之后假如才用分片上传能做到一 ...
-
如何在移动设备上调试html5开发的网页
在我们用phoengap+html5做的移动app中,经常遇到的问题就是 本地网页兼容但是到了app出现不兼容的情况,原因是手机端页面,大多运行在webkit内核的浏览器上,但还是会因平台.厂商的不同 ...
-
HTML5的设计目的是为了在移动设备上支持多媒体
HTML5的设计目的是为了在移动设备上支持多媒体
-
IT兄弟连 HTML5教程 在移动设备上设置原始大小显示
在iPhone系列和iPod Touch中使用的是Safari浏览器,它支持前面介绍的媒体查询表达式.例如,使用iPhone 320px×480px的分辨率去访问我们前面的布局示例,却无法得到我们想看 ...
-
HTML5语音合成Speech Synthesis API简介
by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5865本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意 ...
-
html5获取地理位置信息API
html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...
随机推荐
-
几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
-
Extjs MVC开发模式详解
Extjs MVC开发模式详解 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs 4.x版本中引入了MVC开发模式, ...
-
visual studio 局域网远程调试web项目
1.进入项目根目录,找到.vs/config/applicationhost.config文件(可能是隐藏的) 2.搜索sites节点,找到当前项目,并添加一个binding配置节,将ip地址设置为本 ...
-
html css中id和class的区别比较
在定义样式的时候,有时候会将id和class的用法弄混淆,所以在这里特意说明一下: id和class属性是网页中两个通用的属性,它们协同工作使整个页面变得丰富多彩.当我们为一个元素定义样式时.可以使用 ...
-
SQL Server 实现递归查询
基础数据/表结构 Sql 语句 ;With cte(id,pid,TName)As ( Select id,pid,TName Union All Select B.i ...
-
761. Special Binary String
Special binary strings are binary strings with the following two properties: The number of 0's is eq ...
-
javasscript基础
一.使用JS完成注册表单数据校验 1.需求分析 用户在进行注册的时候会输入一些内容,但是有些用户会输入一些不合法的内容,这样会导致服务器的压力过大,此时我们需要对用户输入的内容进行一个校验(前端校验和 ...
-
Linux内核调试 - 一般人儿我都不告诉他(一)【转】
转自:http://www.cnblogs.com/armlinux/archive/2011/04/14/2396821.html 悄悄地进入Linux内核调试(一) 本文基址:http://blo ...
-
Linux内核分析——第一章 Linux内核简介
第一章 Linux内核简介 一.Unix的历史 1.Unix系统成为一个强大.健壮和稳定的操作系统的根本原因: (1)简洁 (2)在Unix中,很多东西都被当做文件对待.这种抽象使对数据和对设备的 ...
-
UVALive 5840 数学题
DES:给出三种材料A,B,C每种的个数.然后组合AB,BC,AC的利润.问能获得的最大利润是多少. 开始一点思路都没有.然后发现可以枚举其中两种的个数.那么最后一种就确定了.还是感觉很机智. #in ...