分享好友 最新动态首页 最新动态分类 切换频道
JavaScript 陀螺仪检测设备方向(重力感应)手机陀螺仪「JavaScript 陀螺仪检测设备方向(重力感应)」
2025-04-24 22:06

随着陀螺仪作为只能手机的标配,根据手机角度不同,让图片有点视差微动效果可以给用户一点惊喜,于是简单研究了一下 HTML5 下利用陀螺仪获取设备方向的 API。

### 处理方向变化的事件 HTML5 中与手机方向变化有关的 API 有两个,一个是 事件,一个是 事件。

今天这个根据手机动来动去产生微动效果的主要用到 事件,这个事件主要是监听并接收设备方向变化信息。 而 事件主要是用来监听设备在位置和方向上的加速度变化信息,这个主要用在摇一摇等应用上。

监听 事件比较简单:

然后在回调函数 中会有设备转过的角度:

这里的 alpha, beta, gamma 表示的是相对于坐标轴,设备在某个给定轴上的旋转量。

另外放上坐标系的图,方便理解:

光是这样看可能不太好理解,我们可以打开 chrome 开发者工具 Sensors 这一项看看直观的感受。

当我们手机出于直立状态的时候:

也就是只有 beta 值是 90,其它两个都是 0,可以自己改下 beta 值,体验下什么叫沿 X 轴转。

同样的,沿着 Z 轴转的 alpha 值,就是类似我们竖着转手机。

gamma 值:

这样大概就能理解这三个属性是表示些什么东西了,但是这几个值麻烦的地方是,并不能通过单单一个值来表示出手机向某个方向运动,运动的方向还和手机放置的位置有很大关系。除此之外,还有一个坑是 android 中陀螺仪的数据本身不是很稳定,一般不能直接使用,需要加一些缓冲之类的方法来降噪。

还好,上面那些坑已经有人开始填了,就是 shrekwang 大大做的。

orienter 组件

orienter 组件除了提供上面说到的 alpha,beta,gamma 值之外,还另外提供了两个计算出来的值,分别是 lon 和 lat,字面意思是经度,纬度,可以大致用来当成平移距离来计算。

我们来简单写个小 demo,随着手机动,图片也有一些视差效果,原理是利用 事件来获取手机运动方向的改变,然后通过 给设置到图片上。

首先是 html:

HTML 比较简单,我们只是放个图片上去。

然后是利用 orienter 组件来实现我们的功能。

代码比较简单,其中我们对 lon 值进行了处理,lon 的取值范围是 0~360,其中,小于 180 的我们认为是往右移,大于 180 的当成是往左边移动,往左的我们要计算出一个负值。

然后下面有一堆三元运算符用来做判断,因为我们平移的距离有一个极限,这里我设置的是 50。

放上体验地址:

PC 上记得打开 chrome 模拟手机和试试在 Sensors 里模拟转向。

orienter 代码

最后,orienter 帮我们做了那么多事情,当然要大概看下它的源代码啦。

首先是前面一段是兼容 AMD & CMD 和普通引入的代码:

之后最重点的是 方法,其中有个 switch,就是处理我们上面说的 lon 和 lat 两个值的计算,还有运动的方向还和手机放置的位置的处理,以及对 android 陀螺仪不稳定的处理。

代码如下:

分别根据 ios/android 平台对竖屏和左右横屏做相应处理。

我们来看下 ios 下的竖屏:

先看下面那句处理 lat 的, 这里 -90 就是因为竖屏的时候,beta 值默认为 90。即下面这个图:

所以这里 -90 比较好理解。

然后再看上面那句 这里我想了好久,也没想出来为什么竖屏的时候 lon 的值是 alpha 和 gamma 之和。

要理解这个,要从我们平常使用手机的动作来看。现看 gamma 值,gamma 是沿着 y 轴转动,拿出手机,竖直放置,沿着 y 轴转一下,手机是这样的状态:

这样的时候我们一般是要看到更多的左右信息,也就是横向的经度值,所以手机竖直的时候 gamma 要算到 lon 里面。

再来看 alpha 值,alpha 值是表示设备沿 Z 轴的变化。要理解这个,我们要试着想象我们在拍全景照片。以自己为圆心,手臂与地面平行,竖着拿着手机,手臂作为半径,尝试像拍摄全景照片,以身体为圆心,移动手臂。会发现我们我们其实是在做一个圆,而在这途中,手机其实是沿着 Z 轴在转动的。

如果觉得说的太抽象,可以看看下面这个例子,尝试理解一下。

结语

很多看起来很容易实现的功能,实际上却有很多很多的坑,要填这些坑,又要有很多积累和思考,对于那些帮你填坑的人,要说一声『谢谢』。

Demo 源码地址:

参考链接

最新文章
红蝶沦为乾风的炉鼎,但却藏着一个伏笔,将成为红蝶复活的关键
哈喽,大家好,我是木子。《仙逆》动漫现在已经更新到了第84集,在这集中除了王林的剧情之外还有不少红蝶的剧情,在这个时候红蝶可以说是太惨了,因为她现在沦为了乾风的炉鼎,而且看样子乾风对她的控制欲也是非常的强,不过在这集播出之后
豹跃三晋 耀起未来|方程豹山西环耀豹驰旗舰店盛大开业!
豹跃三晋 耀起未来!2025年4月13日,山西环耀豹驰旗舰店正式启幕。作为旗下高端个性化新能源品牌,方程豹的入驻标志着山西汽车市场迈向“个性化电动时代”,环耀集团以全新服务体系赋能用户绿色出行梦想。小店区人民政府、小店区商务局、小
好玩的动作手游单机有哪些2024 高人气的动作单机游戏盘点格斗游戏单机手机版「好玩的动作手游单机有哪些2024 高人气的动作单机游戏盘点」
有单机游戏爱好者吗?给大家推荐一些好玩的动作类游戏,相对而言会比较简单,属于很多玩家的童年回忆,可以格斗冒险。以下就是关于好玩的动作手游单机有哪些2024的高人气排行榜,所有都是有非常好的品质,设定的背景也很丰富,可以用英雄来
港股午评:恒指跌1.73%,恒生科指跌3.06%,华润燃气跌超19%
金融界3月31日消息 港股恒生指数跌1.73%,报23022.05点,恒生科技指数跌3.06%,报5338.22点,国企指数跌1.47%,报8479.74点,红筹指数跌1.56%,报3790.99点。大型科技股中,跌3.59%,跌2.81%,跌3.04%,跌4.8%,跌0.06%,跌2.44%,快手-W跌
小米与华为手机深度对比:旗舰机型谁更胜一筹?手机配置对比「小米与华为手机深度对比:旗舰机型谁更胜一筹?」
在当今智能手机市场,竞争愈发激烈,小米和华为无疑是两大引人瞩目的品牌。从成立之初获得消费者青睐,到如今花样繁多的旗舰机型,二者的发展之路各有千秋。为了帮助消费者在小米14Pro、华为Pura70Pro等多款手机中做出更明智的选择,本文将
巨人的猎手2免费进击的巨人游戏手机版「巨人的猎手2免费」
巨人的猎手2免费基于热门进击的巨人改编的安卓游戏。玩家将扮演勇敢的巨人猎手,与庞大的巨人进行激烈的,保卫人类的空间。游戏提供多样化的武器和技能选择,让玩家能够自由搭配,制定独特的战斗。1. 巨人的猎手2免费拥有丰富的武器库,每
rmx3350是什么手机这是什么牌子的手机「rmx3350是什么手机」
rmx3350是realme GT Flash型号的手机;realme GT Flash配备了6.7英寸E4 sAMOLED显示屏,分辨率为QHD+,刷新率为120Hz;这款手机搭载骁龙888 Plus芯片组,搭配LPDDR5内存和UFS 3.1存储。本教程操作环境:realme UI 2.0系统,realme GT Flash
4月26日起,北京亦庄3条公交运营线路有调整
为方便北京经开区乘客的出行增加公交出行覆盖对所属3条运营线路(专183路、专188路、专231路)分别进行调整12025年4月26日起,调整专183路01专183路调整后首末站:鹿海园五里东门-兴盛街沿途设站:鹿海园五里东门、南海家园七里、四合路、
第二批保险资金长期投资改革试点迎来新进展
  第二批保险资金长期投资改革试点迎来新进展。记者从泰康保险集团获悉,泰康资产关于发起设立全资私募基金管理子公司泰康稳行私募基金管理有限公司的申请已获批。  据了解,2023年10月,金融监管总局批复保险资金长期投资改革试点首批
魅族官宣要发布跨世代AI硅基人 性能强大售价仅1999元
  【CNMO科技消息】4月1日,魅族官方发布了一则“重磅”消息,称将会在4月的发布会上带来一款跨世代AI硅基人战神Note 16号,并且还公布了新机器人详细的信息。战神Note 16号  根据介绍,战神Note 16号采用了黄金比例的环形能量设计,整
相关文章
推荐文章
发表评论
0评