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 remove()和del语句 区别和辨析 列表删除操作
del语句可以删除列表中下标处的值,表中被删除值后后面的所有值将向前移动一个下标 spam = ['A','B','C','D','E'] del spam[2] spam 打印显示:['A', 'B ...
- CodeForces 995B Suit and Tie(贪心,暴力)
https://codeforces.com/problemset/problem/995/B 题意: 就是通过每次移动相邻的两位数,来使数值相同的数挨在一起,求最少要移动多少次. 思路: 直接从前往 ...
- MTF的倾斜边缘计算方法
光学系统性能的衡量方法有很多,常见的有点扩散函数法.瑞利判断法.点 列图法.光学传递函数(MTF)法等,其中 MTF 法在光学系统和镜头加工制造中 使用 最为广泛.MTF 曲线真实的反映了成像系统将物 ...
- java 中的小数点、大数、随机数处理
1.小数点处理 public class Test { public static void main(String[] args) { double i = 3.856; // 舍掉小数取整 Sys ...
- Xcode7 HTTP请求问题
问题: “Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is ...
- day52-线程-队列
#1.线程的队列是使用import queue,如果使用from threading import Queue会报错,因为threading模块没有Queue. #也就是说,线程队列Queue是在qu ...
- rsync实战(二)
加两个需求:1.增加一个模块2.每个模块不同的用户名 步骤: .修改配置文件/etc/rsyncd.conf [backup] comment = commit path = /backup auth ...
- 包-logging-hashlib-深浅拷贝
一.包: 包的本质就是一个模块 什么是包:它是一系列模块文件的结合体,表示形式就是一个文件夹,该文件夹内部通常会有一个__init__..py的文件 导入包的过程:先产生一个执行文件的名称空间 1:创 ...
- MonkeyScript常用命令及Uiautomatorview问题解决
一.MonkeyScript执行脚本的命令 adb shell monkey -f <scriptfile><event-count> 1.Dispatch Trackball ...
- 23)PHP,数组操作函数
汇总: