web端手机方向传感器闲谈
因为工作需要,这段时间接触的手机传感器比较多。
总体来说,市场上的传感器表现参差不齐。IPhone在传感器表现方面卓越,而安卓由于什么机型都有,则显得差强人意。
首先还是说说怎么在web端调用手机传感器吧。
这个还是比较简单的,只需要添加一个事件就可以了。
在最新的h5规范里面,引入了 DeviceOrientation 事件。如果没猜错,该接口应该是调用手机里的综合方向传感器。
事实上,手机上的方向传感器有多个。例如在安卓手机上就有11种传感器,而诸如
- TYPE_GYROSCOPE
- TYPE_LINEAR_ACCELERATION
- TYPE_MAGNETIC_FIELD
- TYPE_ORIENTATION
- TYPE_ROTATION_VECTOR
均可以用作对手机的状态翻转等进行监测。当然这需要不同的方法,按下不表。
而目测DeviceOrientation方法是结合了重力检测与磁场检测两方面实现的翻转检测。
DeviceOrientation方法主要监测的是手机上的三个翻转角。
你可以将手机水平至于桌面上。
- 手机在水平面上旋转为alpha角,此角是基于Z轴旋转。实现方式一般是基于磁场。因此在各种机型上你可以发现这个数值差异十分大。
- 手机正常翻起与桌面夹角为beta角,此角是基于X轴旋转。实现方式一般是基于重力分量。
- 手机侧翻与桌面夹角为gama角,此角是基于Y轴旋转。实现方式也是基于重力分量。
我们可以在w3c上阅读相关的定义数据。
做一个做简单的调用例子
if (window.DeviceOrientationEvent) {
大专栏 web端手机方向传感器闲谈window.addEventListener('deviceorientation', function(event) {
var a = event.alpha,
b = event.beta,
g = event.gamma;
console.log('Orientation - Alpha: ' + a + ', Beta: '+ b + ', Gamma: ' + g);
}, false);
} else {
console.log('This device does not support deviceorientation');
}
借用这段代码你就可以看到手机上的方向传感器封装后的API显示出来的数值。
但是当你记录下来后,你可以发现。该数值在IPhone上是连续而且稳定的。但是在安卓上却十分容易产生波动。
那么,如何去除这种波动则成为了一个十分重要的问题了。
事实上,这个问题也很简单。
我们只需要人工制造一个滤波器就可以了。
假设我们接受的数值为X,则设上一次数值为Xp,我们可以运用一个加权函数降低波动带来的影响。
final=Xalpha+(1-alpha)Xp
当然,假如你的要求比较精细。很多时候简单的一次加权并不能完整去除波动。
所以我们可以采用记录多个以往的值进行平均。
final = (X+(Xp1+Xp2+Xp3+Xp4))/5
通过这种方式得出的数值波动会降低并且更加流畅。
鉴于此,对于传感器的数据调用,一定要真机调试取值适配机型,不要想当然的设置。例如当你把手机与地面垂直的时候,由于磁场感应器位置不佳,容易出现各种方向数值紊乱的场景。因此不推荐调用各种极值的数值。
而关于手机传感器调用的频率,大概是50ms一次。因此我们不需要太过担心带来影响。
web端手机方向传感器闲谈的更多相关文章
- 《物联网框架ServerSuperIO教程》-22.Web端对传感器实时监测与控制。附:v3.6.8版本,支持WebSocket
1.ServerSuperIO v3.6.8更新内容 1.1 增加WebSocket服务端功能,支持自控模式.并发模式.单例模式,不支持轮询模式1.2 接收数据缓存与现有的IO实例分离.1.3 优化代 ...
- 新发现:AirDroid(用Web端控制自己的手机发信息)
http://web.airdroid.com/ 好多功能呀,有空研究研究 http://jingyan.baidu.com/article/b24f6c82cd4ade86bfe5daf3.html ...
- Android利用方向传感器获得手机的相对角度实例说明
http://www.jb51.net/article/37710.htm 1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较 ...
- 利用websocket实现手机扫码登陆后,同步登陆信息到web端页面
新手必看 广播系统 事件系统 准备工作 初始化项目 引入 laravel-websockets 软件包 启动 websocket 监听 主要流程 创建两个页面 建立 socket 连接 手机端扫码登陆 ...
- iOS拍照上传后,在web端显示旋转 Swift+OC版解决方案
问题描述: 手机头像上传,遇到一个怪现象,就是拍照上传时,手机端显示头像正常,但在web端查看会有一个左旋90度的问题. 并且照片竖怕才会有此问题,横拍不存在. 原因分析: 手机拍照时,用相机拍摄出来 ...
- 通过手机Web实现手机摇一摇的功能
经常我们玩微信都会用到查到附近的人,都是在app上实现手机摇一摇的功能.现在,我们将此技术搬移到手机web上,供大家学习,主要是用到HTML5的重要特性就是DeviceOrientation:官方文档 ...
- web端 第一天认识基础
.NET 分为两大类 一.客户端应用程序 C/S 技术: Winform WPF MFC MVVM 二.外部端应用程序 B/S(网页端应用程序/WEB端/WEB端应用程序) 目前学的技术是A ...
- web端,app端,小程序端测试差异详解
前置解释:1.单纯从功能测试的层面上来讲的话,APP 测试.web 测试和H5测试在流程和功能测试上是没有区别的2.Web项目或pc项目都是在电脑上进行测试的.常见的PC项目架构有BS架构和CS架构的 ...
- 简单的方向传感器SimpleOrientationSensor
SimpleOrientationSensor是一个简单的方向传感器.能够识别手机如下表的6种方向信息: SimpleOrientation枚举变量 方向 NotRotated 设备未旋转 Rotat ...
随机推荐
- 理解python的可变参数
以 str.format(*args,**kwargs) 为例. "type1:{},{},{},{}_type2:{a},{b},{c},{d}".format('a',2,*[ ...
- Please select an empty folder to install Android Studio
原因 当前安装的Android Studio的文件夹不是空的 解决 把路径改成一个空文件夹即可
- 第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】
淘淘商城(SpringMVC+Spring+Mybatis) 是传智播客在2015年9月份录制的,几年过去了.由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调 ...
- 通过if语句实现for循环的提前结束
/************************************************************************* > File Name: mybreakin ...
- 基础篇八:log配置
第一:首选查看有哪些日志文件 cd /etc/nginx/ cat nginx.conf cd /var/log/nginx/
- [LC] 285. Inorder Successor in BST
Given a binary search tree and a node in it, find the in-order successor of that node in the BST. Th ...
- PAT甲级——1050 String Subtraction
1050 String Subtraction Given two strings S1 and S2, S=S1−S2 is defined to be the remain ...
- 关于k8s资源类型和缩写
资源类型 缩写 描述 clusters componentstatuses cs configmaps cm daemonsets ds deployments deploy ...
- EXAM-2018-8-9
EXAM-2018-8-9 B 水题 注意理解题意 有坑 G 博弈 观察发现 总是会进行到最后两个,或者先手取完全部,再特判一下只有一张牌的情况 H 九连环 通过找规律 我们可以得出递推式: F[n] ...
- [LC] 78. Subsets
Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...