最近在公司做了一个VR视频的遥控器,目的在于利用手机充当遥控器角色,控制电视端VR视频的播放,我主要开发体感功能,也就是调用手机陀螺仪的数据,以下为具体操作:

  1. 在画面中增加一个体感功能的开关,绑定点击事件
  2. 进入网页后,体感功能自动为开启状态。
  3. 当体感功能状态变化时,如果从开启状态变为关闭,则移除其注册监听事件;如果从关闭变为开启状态,则先进行手机内是否有陀螺仪传感器的判断,如果没有,则提示“该设备不支持体感功能”,如果有,则对陀螺仪添加一个注册监听事件。具体代码如下所示
    sensorControl:function(){if (this.senorswitch) {if(window.DeviceOrientationEvent){window.addEventListener("deviceorientation", this.handleOrientation, true);this.isSensorExist = false;}else{this.isSensorExist = true;}}else {window.removeEventListener("deviceorientation", this.handleOrientation, true);}},
  4. 由于陀螺仪非常敏感,且发送频率高,所以在handleOrientation事件中,先进行时间间隔的判断,先将当前时刻赋值给一个变量,然后将其和上一次发送请求地 时刻相比,如果小于125毫秒(这里是根据电视端需求定的,可根据需求自行修改),则结束这次运行,直至大于或者等于125毫秒,才开始继续进行后续操作。具体代码如下:
    handleOrientation:function(orientData){var requesttime = new Date().getTime();if(requesttime - this.lasttime < 125){return;}this.lasttime = requesttime;var alpha = orientData.alpha;var beta = orientData.beta;var gamma = orientData.gamma;var minusbeta = beta - this.lastbeta;var minusgamma = gamma - this.lastgamma;var params = {"data":{"event":{"accuracy":10,"values":[gamma,beta,alpha]}}};
  5. 从陀螺仪传感器可以获得4个参数,分别为:
  • absolute: 如果方向数据跟地坐标系和设备坐标系有差异,则为true;如果方向数据由设备本身的坐标系提供,则为false
  • alpha: 设备沿z轴上的旋转角度,范围为0~360
  • beta: 设备在x轴上的旋转角度,范围为-180~180,。他描述的是设备由前向后旋转的情况
  • gamma: 设备在y轴上的旋转角度,范围为-90~90度,他描述的是设备由左向右旋转的情况。

手机陀螺仪的注册监听事件相关推荐

  1. HQChart使用教程67 - 鼠标点击K线柱子监听事件

    HQChart使用教程67 - 鼠标点击K线柱子监听事件 点击K线事件 步骤 1. 注册监听事件 事件回调函数说明 参数说明: K线数据说明 交流QQ群: 950092318 HQChart代码地址 ...

  2. Cocos 发射和监听事件 事件派送(TypeScript)

    监听和发射事件 监听事件 事件处理是在节点(cc.Node)中完成的.对于组件,可以通过访问节点 this.node 来注册和监听事件. 事件监听函数 on 可以传第三个参数 target,用于绑定响 ...

  3. springboot13 发布和监听事件

    spring中的事件驱动模型Event(也叫发布订阅模式),是观察者模式的一个典型的应用 好处:业务解耦,在不影响原来业务逻辑的情况下,加入其它业务 场景: app上线后已实现用户注册功能,现需要在用 ...

  4. java图形界面的监听_非专业码农 JAVA学习笔记 用户图形界面设计与实现-所有控件的监听事件...

    用户图形界面设计与实现-监听事件 System.applet.Applet (一)用户自定义成分 1.绘制图形 Public voit piant(Ghraphics g){  g.drawLine等 ...

  5. android地图旋转监听,android 百度地图  监听事件

    1.一般事件监听 在初始化地图Activity时,注册一般事件监听,并实现MKGeneralListener的接口处理相应事件,将mBMapMan.init("我的Key", nu ...

  6. Openlayers 地图监听事件

    Openlayers 地图监听事件 OpenLayers 教程 Openlayers 地图监听事件 在线示例 OpenLayers 教程 地图中的监听事件,也是经常用的功能,一般用于获取坐标点,进而查 ...

  7. android listview分区域监听,listview的监听事件

    package JAVASwing;import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionE ...

  8. HTML学习14-js 内置对象 Date() 常用的日期的方法 定时器 倒计时 监听事件

    内置对象 内置对象: 内置对象就是指这个语言自带的一些对象,供开发者使用,这些对象提供了一些常用的或是最基本而必要的功能. 手机买来就能发短信 就能打电话 日期函数 ( Date() ) 这个函数 ( ...

  9. Spring Boot监听事件同步和异步使用

    废话前言: 代码环境:WIN7+IDEA+JAD1.8+Spring Boot 2.0 首先说一下我为什么使用事件,比如现在创建一个订单但是我创建成功后要给客户发送一条短信和一个邮件提醒,本身没创建订 ...

最新文章

  1. 【剑指offer】不使用新变量,交换两个变量的值,C++实现
  2. Cookie和会话状态 (转)
  3. 二叉树小球下落问题c语言,#C++初学记录(树和二叉树)
  4. ios 数组中的字典排序_利用数组和字典,实现按指定规则的排序
  5. bat循环导oracle,Oracle备份恢复与批处理文件实操
  6. labview与单片机正弦信号_LabVIEW小白入门——低通滤波器
  7. bash学习之环境变量
  8. 树莓派 Learning 001 装机 ---之 1 安装NOOBS系统
  9. 番茄助手-解决vs2010没有智能提示问题
  10. sqlserver 2008完整安装教程
  11. 一个python的UG二次开发简单实例
  12. 冰点下载:数据解析错误
  13. 用C++完成华氏温度换摄氏温度
  14. huobi程序化交易项目
  15. python销毁线程_python线程销毁
  16. Vue项目provide和inject的使用
  17. ThinkPad加装SSD固态硬盘/内存条 系统迁移
  18. php 电梯程序,干货:电梯调试流程内容!
  19. Python - 数据类型之字符串、数字
  20. 树莓派安装下载服务器,小米电视播放

热门文章

  1. 福建师范大学oracle期末,福建师范大学19年8月课程考试《面向web应用程序设计 》作业考核试题【标准答案】...
  2. 有效打造你的个人品牌
  3. [宏]_IO, _IOR, _IOW, _IOWR 宏的用法与解析
  4. Pycharm卡顿解决
  5. 如何实现数组的随机排序
  6. 多核时代:并行程序设计探讨(2)——并行实现技术
  7. Swagger和WireMock的简单使用
  8. 【LeetCode】596.超过5名学生的课
  9. 前端模块化详解(完整版)
  10. 读书随记——《傲慢与偏见》(5)