前言

现在很多H5页面都会使用到类似摇一摇等功能,这其实只是应用了HTML5上的传感器api的其中一部分,以下针对自己学习和使用做了个总结,以做备忘和分享。

Device API

w3c定义了很多传感器的API,有很多还在草案阶段,兼容性和可用性不是很高,但在可预见的未来,相信这些强大的API可以让HTML5更加强大,实现更多原来在native APP上才能实现的功能、应用。

"未来"的传感器事件

DOM Sensor Event

Sensor Type

Data Type

Units

devicetemperature

A ambient temperature sensor

double

degree Celsius (ºC)

devicepressure

A pressure sensor

double

kiloPascal (kP)

devicehumidity

A releative humidity sensor

double

percentage

devicelight

A light sensor

double

Lux

devicenoise

A ambient noise sensor

double

dbA

deviceproximity

A proximity sensor

double

centimetres (cm)

w3c规定了设备传感器可以通过事件来触发访问数据,例如光线传感器通过以下方式获取数据:

if('ondevicelight' in window) {

window.addEventListener("devicelight", function(event) {

//light level is returned in lux units

console.log(event.value + " lux");

});

}

if('onlightlevel' in window){

window.addEventListener("lightlevel", function(event) {

//light value can be dim, normal or bright

console.log(event.value);

});

}

常用的传感器事件

目前最常用的就是基于手机陀螺仪的重力传感器,通过它可以实现摇一摇、赛车游戏、惯性导航等应用。

deviceorientation 提供设备的物理方向信息,表示为一系列本地坐标系的旋角。

devicemotion 提供设备的加速信息,表示为定义在设备上的坐标系中的α坐标。其还提供了设备在坐标系中的自转速率。若可行的话,事件应该提供设备重心处的加速信息。

以下是w3c解释重力感应器时的经典示意解释:

(坐标系遵循右手定则,单位是角度。P.S. Firefox中是弧度)

设备围绕z轴的旋转角度为α,α角度的取值范围在[0,360)。

设备在初始位置,地球(XYZ)和机身(xyz)对齐(即水平放置,顶端向北,屏幕朝上)。

设备围绕z轴的旋转角度为α,并与先前的x和y轴位置对比,显示x,y轴新坐标为x0和y0。

设备围绕x轴的旋转角度为β,β角度的取值范围在(-180,180)。

设备围绕x轴的旋转角度为β,并与先前的y和z轴的位置对比,显示y,z轴新坐标为y0和z0。

设备围绕y轴的旋转角度为γ,γ角度的取值范围在(-90,90)。

设备围绕y轴的旋转角度为γ,并与先前的x和z轴的位置对比,显示x,z轴新坐标为x0和z0。

使用方法

注册一个deviceorientation事件的接收器:

window.addEventListener("deviceorientation", function(event) {

// 处理event.alpha、event.beta及event.gamma

}, true);

将设备放置在水平表面,屏幕顶端指向西方,则其方向信息如下:

{

alpha: 90,

beta: 0,

gamma: 0

};

iOS 和 Android 两家系统对于手机硬件提供 alpha 数值不尽相同,如果在iOS上会有webkitCompassHeading,webkitCompassHeading表示「手机与地球正北方的夹角」,而 Android 则直接用 alpha 即可。( 不过如果不是 Chrome 又不尽相同,反正如果不同,就是在进行角度的加减即可)。另外github上有个库将不同的手机的参数统一了,可以使用Device API Normaliser。

为了获得罗盘指向,可以简单的使用360度减去alpha。若设被平行于水平表面,其罗盘指向为(360 - alpha)。 若用户手持设备,屏幕处于一个垂直平面且屏幕顶端指向上方。beta的值为90,alpha和gamma无关。 用户手持设备,面向alpha角度,屏幕处于一个垂直屏幕,屏幕顶端指向右方,则其方向信息如下:

{

alpha: 270 - alpha,

beta: 0,

gamma: 90

};

注册一个devicemotion事件的接收器:

window.addEventListener("devicemotion", function(event) {

// 处理event.acceleration、event.accelerationIncludingGravity、

// event.rotationRate和event.interval

}, true);

将设备放置在水平表面,屏幕向上,acceleration为零,则其accelerationIncludingGravity信息如下:

{

x: 0,

y: 0,

z: 9.81

};

设备做自由落体,屏幕水平向上,accelerationIncludingGravity为零,则其acceleration信息如下:

{

x: 0,

y: 0,

z: -9.81

};

将设备安置于车辆至上,屏幕处于一个垂直平面,顶端向上,面向车辆后部。车辆行驶速度为v,向右侧进行半径为r的转弯。设备记录acceleration和accelerationIncludingGravity在位置x处的情况,同时设备还会记录rotationRate.gamma的负值:

{

acceleration: {x: v^2/r, y: 0, z: 0},

accelerationIncludingGravity: {x: v^2/r, y: 0, z: 9.81},

rotationRate: {alpha: 0, beta: 0, gamma: -v/r*180/pi}

};

简单的摇一摇实现:

if (window.DeviceMotionEvent) {

window.addEventListener('devicemotion',deviceMotionHandler, false);

var speed = 30;//speed

var x = y = z = lastX = lastY = lastZ = 0;

function deviceMotionHandler(eventData) {

var acceleration =eventData.accelerationIncludingGravity;

x = acceleration.x;

y = acceleration.y;

z = acceleration.z;

if(Math.abs(x-lastX) > speed || Math.abs(y-lastY) > speed || Math.abs(z-lastZ) > speed) {

//简单的摇一摇触发代码

alert(1);

}

}

lastX = x;

lastY = y;

lastZ = z;

}

参考

html5光线传感器,HTML5设备传感器总结相关推荐

  1. 免费html5代码,HTML5(示例代码)

    一.什么是HTML5 1.1 HTML5 简介 万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改,作为新HTML语言,具有新的元素.属性和行为 XHTML可扩展 ...

  2. 兄弟连html5在线画板,IT兄弟连 HTML5教程 HTML5做到了与之前版本的兼容

    原标题:IT兄弟连 HTML5教程 HTML5做到了与之前版本的兼容 为了保证HTML5能与之前的HTML版本达到最大的兼容,HTML5对一些元素标记的省略.boolean值的属性,以及引号的省略这几 ...

  3. 对html5的了解,HTML5——对HTML5的认识

    首先非常感谢李刚老师出的这本书<HTML5/CSS3/JavaScript讲义>,今天读了第一章节的内容,趁热打铁,总结一下. HTML5的时代已经到来,它对所有的前端开发人员来说是一种福 ...

  4. html5发展前景-兄弟连,IT兄弟连 HTML5教程 HTML5的曲折发展过程 HTML5的诞生

    原标题:IT兄弟连 HTML5教程 HTML5的曲折发展过程 HTML5的诞生 十年磨一剑,正如我们所看到的一样,HTML5大潮正来势汹汹.但也正如我们所知道的一样,HTML5是一种技术标准,它的语义 ...

  5. 下列关于html5表单的多样输入方式,IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1...

    原标题:IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1 HTML5拥有多个新的表单输入类型,这些新特性提供了更好的输入控制和验证.并不是所有的主浏览器都支持新的input类型,不过我们可 ...

  6. 这不仅仅是html5的HTML5问题

    这不仅仅是html5的HTML5问题,它还关系到了我们应该如何工作这类原则性的问题,css working group更青睐于使用www-风格的输入.因为目标人群是web开发者,所以lea并不担心向后 ...

  7. css html5简介,HTML5 简介......

    HTML5 示例 实例 Your browser does not support the video tag. 什么是 HTML5? HTML5 简介 HTML5 是最新的 HTML 标准. HTM ...

  8. html5代码好学吗,0基础能学习Html5吗?Html5好学吗?

    原标题:0基础能学习Html5吗?Html5好学吗? 0基础可以学习Html5吗?这两年一直是被挂在嘴边的话题,随着人们对用户体验的要求越来越高,前端开发技术难度越来越大,所以对于IT从业者来讲,前端 ...

  9. 200套工作室设计行业响应式Html5模板HTML5+CSS3设计网站模板简洁设计师作品展示响应式模板整洁扁平宽屏CSS3网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机se

    200套工作室设计行业响应式Html5模板HTML5+CSS3设计网站模板简洁设计师作品展示响应式模板整洁扁平宽屏CSS3网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机se ...

  10. 一个html基本写法,HTML5教程:HTML5的基础写法

    HTML5教程:HTML5的基础写法 对比一下XHTML 1.0 Transitional的规范,html5基本上没有XHTML 1.0 Transitional严格的要求,并且简化了很多东西. •文 ...

最新文章

  1. ABAP 动态 SQL
  2. MOXy作为您的JAX-RS JSON提供程序–服务器端
  3. 空军军医大学计算机复试线,空军军医大学2019年考研复试分数线
  4. java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别
  5. 在电脑搭建oracle服务器端,oracle 服务器端搭建(C#开发环境)
  6. eclipse在debug启动时无法启动解决办法
  7. java语言程序设计考题_《JAVA语言程序设计》期末考试试题及答案6(应考必备题库)...
  8. 【转】服务发现:Zookeeper vs etcd vs Consul
  9. SEO 移动搜索优化
  10. 一则“亿万富翁给妻子捐5亿美元科研经费”的八卦,引发科研筹钱难的思考
  11. 踏歌黑名单工具类DEMO(AUB)
  12. 正向有功正向无功_电表的正向有功和反向无功的详细解读
  13. 年薪40W的程序员需要掌握怎样的技术(Java程序员高薪必看)
  14. 汉画轩—让国学与区块链技术碰撞出更璀璨的火花
  15. 人人农场 renren 外挂 Java 实现
  16. IE浏览器实现打印预览
  17. IOS OC 多态(白话)
  18. SAP MM批次管理(6)批次确定
  19. 反恐精英在线服务器名称,反恐精英Online-官方网站
  20. 段视频伪原创 手机如何去除视频md5

热门文章

  1. 客户细分——RFM模型
  2. [WPF]Win10便签软件
  3. JAVA后台,对上传资源限定大小
  4. Busiest Computing Nodes (线段树维护区间最小值)
  5. ArcGIS Server 发布服务失败
  6. bugku秋名山老司机
  7. 梦三花重金修改服务器,《新天龙八部》6月14日全服更新维护公告
  8. 一年级abb式词语并造句_abb词语造句,用ABB词语造句
  9. mysql创建管理员账户
  10. Hero image网站转化这么高?21个最佳案例给你参考