作者:大漠 日期:2016-09-18 点击:1772
Web 3D
Animation
Web动画

编辑推荐: 掘金是一个高质量的技术社区,从 CSS 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货。 点击链接查看最新前端内容,或到各大应用市场搜索「 掘金」下载APP,技术干货尽在掌握中。

本文转载来自于oxxostudio.tw的《HTML5 控制裝置陀螺儀 ( 三軸 )》。如需转载,烦请注明原文出处:http://www.oxxostudio.tw/articles/201506/html5-device-orientation.html

自从几年前入手智能型手机之后,对于行动装置上特有的陀螺仪 ( 三轴 ) 侦测与感应器就蛮感兴趣的,而相关的应用除了在一些典型的 APP 里头很常见之外 ( 指南针、水平仪、星空定位...等 ),在游戏里头更是屡见不鲜 ( 赛车、跑酷、飞行、滚球...等 ),但撇除 APP 不谈,过去在网页里头要使用陀螺仪的三轴感测,几乎是不可能,应该是说沒这个必要,因为在智能行动装置尚未普及的年代,谁会搬台电脑转来转去呢?

不过在行动装置发达的现在,手机或平板的浏览器效能也跟了上来,加上 iOS 与 Android 两大阵营对浏览器可以控制硬件的权限逐渐轻松,慢慢的当年 HTML5 里头所制定出来,和控制装置硬件相关的 API 也逐渐可以派上用场。

这篇文章主要是记录自己控制陀螺仪获取三轴数值的用法,如果不做个记录,我可能过一阵子又忘记怎么用了。

起手式

要使用行动装置的陀螺仪,我们只要监听 deviceorientation 的事件就可以,它的用法和 click 是一模一样。

window.addEventListener('deviceorientation', function(event) {var alpha = event.alpha;var beta = event.beta;var gamma = event.gamma;
}, false);

从上述最基本的代码中可以看到,这个事件有三个 API,分別是:alphabeta 以及 gamma,这三个 API 代表什么意思呢?下面三张图分別表现三个轴转动的角度和方向。

aplha

行动装置水平放置时,绕 Z 轴旋转的角度,数值为 0 度到 360 度。

beta

行动装置水平放置时,绕 X 轴旋转的角度,数值为 -180 度到 180 度。

gamma

行动装置水平放置时,绕 Z 轴旋转的角度,数值为 -90 度到 90 度。

实际测试

知道起手式之后,接着就用简单的示例来测试看看,下面的示例我在画面中放入三个区块,分別代表 alphabeta 与 gamma,当用手机打开这个页面,转动手机就会看到数值的变化,此外在一开始也加入一個判断式,如果手机不支持,则会显示不支持的文字信息,判断的方式为读取 window 是否有DeviceOrientationEvent这个属性,其实我们也可以从浏览器的 console 里头看到 window 是否有包含这个属性。

理解之后就看一下代码,HTML 就三个区块。

alpha:<span id="alpha"></span><br/>
beta:<span id="beta"></span><br/>
gamma:<span id="gamma"></span><br/>

JavaScript 的部分利用window.addEventListener监听deviceorientation事件,接着就可以获取 alphabeta 和 gamma,不过获取到的数值其实是个有非常多位小数点位数的数值,再利用 Math.round 来四舍五入。

if(window.DeviceOrientationEvent) {window.addEventListener('deviceorientation', function(event) {var a = document.getElementById('alpha',b = document.getElementById('beta'),g = document.getElementById('gamma'),alpha = event.alpha,beta = event.beta,gamma = event.gamma;a.innerHTML = Math.round(alpha);b.innerHTML = Math.round(beta);g.innerHTML = Math.round(gamma);}, false);
}else{document.querySelector('body').innerHTML = '你的瀏覽器不支援喔';
}

完成后,用手机打开旋转一下,应该就可以看到数值的变化了。( 示例:html5-device-orientation-demo01.html,也可以扫描下方的二维码)

效果类似下面的Gif图:

CSS 3D 的应用

既然有了这么好玩又好用的 Web API,就一定要拿之前玩的 CSS 3D 来试试看,这里我们用最简单的正立方体来测试 ( 正立方体的制作作请参考:《玩转 CSS 3D - 正四面体与正六面体》 ),基本上就是把上面 alphabeta 和 gamma 的数值,提供给正立方体的 space

HTML 的部分就放上 cameraspace 和 box

<div class="camera"><div class="space"><div class="box1">1</div><div class="box2">2</div><div class="box3">3</div><div class="box4">4</div><div class="box5">5</div><div class="box6">6</div></div>
</div>

CSS 就比较复杂,不过因为不是这篇的重点所以就略过,有兴趣的就去阅读《 玩转 CSS 3D - 正四面体与正六面体 》这篇文章,直接看JavaScript的部分,沒有太特別,跟上一个示例几乎相同,不过因为这里我用了document.querySelectorAll,返回的是一个数组,所以要用space[0]

var space = document.querySelectorAll('.space');
if(window.DeviceOrientationEvent) {window.addEventListener('deviceorientation', function(event) {var alpha = event.alpha,beta = event.beta,gamma = event.gamma;space[0].style.webkitTransform = 'rotateX('+beta+'deg) rotateY('+gamma+'deg) rotateZ('+alpha+'deg)';space[0].style.transform = 'rotateX('+beta+'deg) rotateY('+gamma+'deg) rotateZ('+alpha+'deg)';space[0].style.mozTransform = 'rotateX('+beta+'deg) rotateY('+gamma+'deg) rotateZ('+alpha+'deg)';}, false);
}else{document.querySelector('body').innerHTML = '你的瀏覽器不支援喔';
}

完成后,用手机打开旋转一下,应该就可以看到一个正立方体在旋转。(示例:html5-device-orientation-demo02.html,也可以扫描下面的二维码)。

效果类似下面的Gif图:

手机网页指南针的应用

经由上面两个例子,应该就可以比较了解相关的原理,接着要来制作指南针了,不过由于iOS 和 Android 两家系统对于手机硬件提供 alpha 数值不尽相同,所以这里必须使用一个叫做webkitCompassHeading的属性來判断是 iOS 还是 Android,如果再 iOS 上头才会有webkitCompassHeadingwebkitCompassHeading表示「手机与地球正北方的夹角」,而 Android 则直接用 alpha 即可。( 不过如果不是 Chrome 又不尽相同,反正如果不同,就是在进行角度的加减即可)。

一开始仍然要先写 HTML,这里我只放上一个名为 compass 的 div,背景图用指南针的背景图。

<div id="compass"></div>

CSS 的写法是这样:

#compass{margin:0 auto;width:90%;background-image:url(compass.jpg);background-size:cover;transform-origin:center center;
}

再来就是精彩的 JavaScript,最上面三行只是在定义指南针大小,可以忽略,重点在判断webkitCompassHeading,抓到数值之后,把数值传给 alpha,如果沒抓到,就直接用 alpha 得到的数值即可。

var compass = document.getElementById('compass'),w = compass.offsetWidth;compass.style.height = w +'px';if(window.DeviceOrientationEvent) {window.addEventListener('deviceorientation', function(event) {var alpha;//     判斷是否為 iOS 裝置if(event.webkitCompassHeading) {alpha = event.webkitCompassHeading; // iOS 裝置必須使用 event.webkitCompassHeadingcompass.style.WebkitTransform = 'rotate(-' + alpha + 'deg)';show.innerHTML = alpha;}else {alpha = event.alpha;webkitAlpha = alpha;if(!window.chrome) {webkitAlpha = alpha-270;}}compass.style.Transform = 'rotate(' + alpha + 'deg)';compass.style.WebkitTransform = 'rotate('+ webkitAlpha + 'deg)';compass.style.MozTransform = 'rotate(-' + alpha + 'deg)'; }, false);
}else{document.querySelector('body').innerHTML = '你的瀏覽器不支援喔';
}

完成后,用手机打开旋转一下,一个网页指南针就順利诞生啰!(示例:html5-device-orientation-demo03.html,也可以扫描下方的二维码)。

效果类似下面的Gif图:

结合实物的应用 ( Webduino )

为什么会写这篇文章呢?最主要是 Webduino 的教学示例里头有用到,下面这个视频,就是利用手机的陀螺仪,让马达可以左右摆动,轻松完成网页与实物的结合。( 对于 Webduino 有兴趣的可以參考:https://webduino.io)。

此外还有 Webduino 的前端工程师爱好,用陀螺仪做了一个操控夹娃娃机的装置,也是很不赖!

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文:  http://www.w3cplus.com/javascript/html5-device-orientation.html?utm_source=tuicool&utm_medium=referral  ©  w3cplus.com

【转载】HTML5 控制装置陀螺仪 ( 三轴 )相关推荐

  1. HTML5 控制手机陀螺仪

    监听deviceorientation window.addEventListener('deviceorientation', function(event) {var alpha = event. ...

  2. 三轴联动c语言算法,(数控加工)虚拟轴数控机床的仿三轴控制.pdf

    (数控加工)虚拟轴数控机 床的仿三轴控制 虚拟轴数控机床的仿三轴控制 前言 虚拟轴数控机床的出现被认为是本世纪最具革命性的机床设计突破. 如果充分发挥这种新型机床在结构上的优势,就有可能为大幅度地提 ...

  3. 三轴加速度传感器和六轴惯性传感器_六轴加速度传感器Beacon

    六轴加速度传感器Beacon 一.产品简介: 六轴加速度传感器Beacon是重庆金瓯科技发展有限责任公司基于Beacon技术研发的新一代传感器产品.该产品可以将采集的加速度数据信息通过Beacon广播 ...

  4. 三轴加速度计、三轴陀螺仪、三轴磁力计

    1.今天要做的事情 列出:可能影响因素,对影响因素做实验.如何设置对比实验? 如何设置对比实验? 三轴加速度计 1.加速度计的原理 三轴加速度:输出的速度是去掉重力后的整体加速度,因此,三轴加速度计可 ...

  5. 三轴陀螺仪MPU3050驱动解析

    MPU3050是invensense公司的三轴陀螺仪芯片,三轴陀螺仪最大的作用就是"测量角速度,以判别物体的运动状态,所以也称为运动传感器. 下图是MPU3050的系统框图,芯片有1个中断引 ...

  6. 解读:安卓手机上的三轴陀螺仪

    转载▼ 标签: 三轴陀螺仪 分类: 玩机小技巧    现在的手机市场上很多人都在关注硬件,各种参数满天飞,各种硬件都来过招,天天跑分,但是,好像很多人都忽视了一个东西,三轴陀螺仪. 三轴陀螺仪,是一个 ...

  7. 基于霍尔传感器的三轴磁场检测小装置

    本次项目是制作一个三轴磁场检测的小装置,采用霍尔传感器实现检测,首先我们来介绍一下什么是霍尔传感器. 1.霍尔传感器介绍 霍尔传感器是根据霍尔效应制作的一种磁场传感器.磁场中有一个霍尔半导体片,恒定电 ...

  8. 三轴加速度传感器和六轴惯性传感器_一文读懂三轴,六轴,MEMS陀螺仪(角速率传感器)的区别...

    原标题:一文读懂三轴,六轴,MEMS陀螺仪(角速率传感器)的区别 随着现代科技的不断发展,陀螺仪也被应用到越来越多的领域和行业,例如我们常见纸飞机等飞行类游戏,赛车类游戏等.以陀螺仪为核心的惯性制导系 ...

  9. 无人机中的IMU单元(MEMS 三轴加速计、三轴陀螺仪、三轴磁力计)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨autotian@CSDN 编辑丨古月居 三轴加速度计 (1)测量比力 三轴加速度计是一种惯性传 ...

  10. 2022-2028年中国三轴陀螺仪行业市场深度分析及投资前景分析报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了三轴陀螺仪行业相关概述.中国三轴陀螺仪行业运行环境.分析了中国三轴陀 ...

最新文章

  1. 微软小冰发布知乎主题曲,人工智能首次开始接近人类歌手水平
  2. javascrit2.0完全参考手册(第二版) 第1章第1节 在XHTML文档中增加javascript
  3. 详析VC中坐标系的建立
  4. 通过 SpringBoot 中使用 lombok 实现自动创建JavaBean的get/set方法、全参/无参构造方法、toString()、equals()、hashCode()
  5. Hadoop sqoop数据导入导出工具安装
  6. java.policy无法修改_如何配置Policy文件进行Java安全策略的设置
  7. YOLO 系目标检测算法家族全景图!
  8. 【Elasticsearch】ES内存满问题排查思路
  9. 强制定义某个变量的内存地址
  10. php 脚本执行超时,PHP脚本运行超时管理机制
  11. 全国各省份结婚离婚面板数据(2000-2019年)
  12. 2021年安全员-A证(江西省)报名考试及安全员-A证(江西省)考试平台
  13. 《孙子兵法》十三篇注译(1--导读)
  14. 自己计算机设置盘密码怎么操作,电脑硬盘,教您电脑硬盘怎么设置密码
  15. Origin绘图—如何添加参考线
  16. hibernate之@FilterDef @Filter注解的使用
  17. 斐讯dns服务器未响应,斐讯k2无线网络初始密码是?
  18. 【时序】基于 TCN 的用于序列建模的通用卷积和循环网络的经验评估
  19. Page Rank查询工具 | Page Rank Checker
  20. 江苏计算机全国计算机复习,2017年江苏省计算机等级考试复习资料.pdf

热门文章

  1. TypeLoadException 编译成功,运行时报错
  2. MySQL 之 The definition of table 'p' prevents operation UPDATE on table 'post'.
  3. charles 修改responses属性
  4. ubuntu中ping停不下来的解决
  5. CloudCompare:V2.6.3 菜单栏和工具栏 中英文对照 功能简述
  6. 2021-07-06淘宝,天猫超市
  7. 夜神模拟器 Nox Player 雷电模拟器 掉线 连不上 运行不显示的解决方案
  8. GEE:Goometry几何图形的地理图形与平面图形
  9. 智能编程计算机表演赛,中国儿童青少年计算机表演赛在京闭幕
  10. 背单词APP调研分析