实现摇一摇功能- H5 设备运动事件DeviceMotionEvent DeviceOrientationEvent

简介: 新年不是搞了个摇签的功能吗,弹幕效果咱们前面讲过了,今天来说说摇一摇效果

DEMO


  1. 基础 DEMO,摇一摇然后可以看红绿色,有颜色代表触发。


  1. 完整 DEMO


  • 摇一摇手机,绿色变为黄色,为分数统计
  • 黄色 + 触发 50 阈值时 ,触发 200ms 震动
  • 黄色 + 触发 100 阈值时 ,触发声音效果


设备方向和运动监听


html 5 提供了一些方法在移动端获得设备方向及运动(因为他是依赖传感器硬件的,pc 没有也不存在抱着台式机跑来跑去场景)。传感器包括陀螺仪、加速器和磁力仪(罗盘)。

可以实现什么效果?


  1. VR


  1. 刺激战场的陀螺仪微调


  1. 我们这里用到的摇一摇


devicemotion


DeviceMotionEvent 在设备发生摆动、运动(手机疯狂摇摆,摇一摇场景)时产生。


devicemotion 是用来监听手机加速度变化的事件回调中可以提供设备的加速度信息。

表示为在设备上定义的坐标系中的笛卡尔坐标,提供了设备在坐标系中的自转速率。


对于一个竖屏摆放的设备来说,设备三个方向轴的位置为:


  1. X 方向为从设备的左边(负 -)到右边(正 +)


  1. Y 方向为从设备的底部(负 -)到顶部(正 +)


  1. Z 方向为垂直于屏幕由设备的背面(负 -)到正面(正 +)。


有 4 个只读属性:属性测试Demo摇晃小球Demo(加速度)


  1. accelerationIncludingGravity:设备在 X,Y,Z 轴方向上带重力的加速度的对象。加速度的单位为 m/s²。重力加速度(包括重心引力)


  1. acceleration:设备在 X, Y, Z 轴方向上加速度的对象。加速度的单位为 m/s²。加速度(需要设备陀螺仪支持)


  1. rotationRate:设备在 alpha,beta, gamma 轴方向上旋转的速率的对象。旋转速率的单位为 °/s(degrees per seconds) 。旋转速度


  1. interval:表示从设备获取数据的频率,单位是毫秒。获取的时间间隔


deviceorientation


DeviceOrientationEvent 加速度传感器检测到设备在方向上产生变化时触发。


监听设备方向(设备旋转和仰角变化的行为),提供设备的物理方向信息,表示为一系列本地坐标系的旋角。


属性有三个,用于描述设备方向:属性测试摇晃小球Demo(当前设备方向)


  1. alpha
  2. beta
  3. gamma


当手机禁止的时候你会发现他是不动的。拿起移动时就会发现回调开始调用。


摇一摇功能实现


  1. devicemotion-demo 我们可以使用 devicemotion 直接来监听设备的运动,当他超过特定的阈值,我们就认为在摇一摇。


接下来,我们可以摇起来了,可以看到背景色会从绿色变为黄色,然后也有触发阈值的次数的统计。


bVbGTxU.webp.jpg


window.addEventListener('devicemotion', (e) => {
     console.log(e)
     if(this.devicemotionReturn) return ;
     this.historyDevicemotion = JSON.parse(JSON.stringify(this.devicemotion))
     this.devicemotion.accelerationIncludingGravity.x = e.accelerationIncludingGravity.x
     this.devicemotion.accelerationIncludingGravity.y = e.accelerationIncludingGravity.y
     this.devicemotion.accelerationIncludingGravity.z = e.accelerationIncludingGravity.z
     if(this.historyDevicemotion.accelerationIncludingGravity.x || 
         this.historyDevicemotion.accelerationIncludingGravity.y || 
         this.historyDevicemotion.accelerationIncludingGravity.z){
         // 计算单一方向加速度的差值
         var thresholdCount = Math.max(
             Math.abs(this.historyDevicemotion.accelerationIncludingGravity.x - e.accelerationIncludingGravity.x),
             Math.abs(this.historyDevicemotion.accelerationIncludingGravity.y - e.accelerationIncludingGravity.y),
             Math.abs(this.historyDevicemotion.accelerationIncludingGravity.z - e.accelerationIncludingGravity.z)   
         )
         // 阈值判断
         if(thresholdCount > 1) this.devicemotion.thresholdCount_1++;
         if(thresholdCount > 5) this.devicemotion.thresholdCount_5++;
         if(thresholdCount > 10) this.devicemotion.thresholdCount_10++;
         if(thresholdCount > 15) this.devicemotion.thresholdCount_15++;
         if(thresholdCount > 20) this.devicemotion.thresholdCount_20++;
         if(thresholdCount > 25) this.devicemotion.thresholdCount_25++;
         if(thresholdCount > 50) this.devicemotion.thresholdCount_50++;
         if(thresholdCount > 100) this.devicemotion.thresholdCount_100++;
         // 颜色变化逻辑
         if(thresholdCount > 20) this.devicemotion.shakeValue = Math.min(255, this.devicemotion.shakeValue + 10)
     }
 })


2.deviceorientation-demo 我们可以使用 deviceorientation 来监听设备的方向变化,也是设置阈值,超过一定的幅度我们就认为在摇动手机。测试方法同上我就不多介绍了。


震动功能实现


测试地址Navigator.vibrate() 可以使设备(需硬件支持,手机一般都有响铃并震动功能)产生有频率(可以传入数组)的震动。


若设备不支持震动,该方法将无效。


若某震动方式已经在进行中(当该方法调用时),则前一个震动方式停止,新的取而代之。


若因为提供无效的参数使得无法使设备震动,它将返回false,否则返回true。


若振动方案导致长时间的震动,它会被截断:最大震动时长取决于每个浏览器的具体实现。


navigator.vibrate(duration);


  1. window.navigator.vibrate(200); 一个200ms的震动


  1. window.navigator.vibrate(0); 停止震动,可以理解为覆盖,然后震动0ms


  1. window.navigator.vibrate([100,30,100,30,100,200,200,30,200,30,200,200,100,30,100,30,100]); 有频率的震动,奇数位为震动时间,偶数位为暂停时间。我下标按1开始的啊。


声音播放功能实现


声音播放我们就直接使用 audio 标签实现即可,测试地址。复杂一点可以看我之前写的基于better-scroll 实现歌词联动功能

相关文章
|
移动开发 前端开发
前端(十八):移动端H5调用摄像头拍照旋转解决方案
移动端H5调用摄像头拍照旋转解决方案
342 0
|
1月前
|
人工智能 安全 物联网
园区导航如何实现?GPS与蓝牙定位技术精准导航
园区导航系统融合了大数据、人工智能和物联网技术,实现了室内外无缝切换和精准定位,提供智能路径规划、全方位服务信息和安全保障,提升了园区管理效率和用户体验。
46 0
|
5月前
|
算法 搜索推荐 物联网
基于iBeacon蓝牙定位技术的反向寻车系统:打造高效智能的停车场导航体验
**基于iBeacon的反向寻车系统利用蓝牙信标实现停车场内车辆精确定位。车主停车时绑定手机,通过APP迅速导航至车辆。系统关键组件包括iBeacon硬件部署、数据处理与用户界面设计,采用高精度定位算法、实时数据处理和智能路径规划。随着技术发展,该系统有望在更多公共场所提升停车体验。**
195 1
基于iBeacon蓝牙定位技术的反向寻车系统:打造高效智能的停车场导航体验
|
11月前
|
前端开发 UED 计算机视觉
前端调取摄像头并实现拍照功能
前端调取摄像头并实现拍照功能
1070 0
|
前端开发 JavaScript
与众不同的夜间开关交互效果
与众不同的夜间开关交互效果
74 0
|
6月前
|
数据采集 搜索推荐 JavaScript
Uniapp连接iBeacon设备——实现无线定位与互动体验(理论篇)
Uniapp连接iBeacon设备——实现无线定位与互动体验(理论篇)
278 0
|
6月前
Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)
Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)
106 0
HMI-31-【运动模式】解决音乐模块图片显示问题
上一篇中,我们基本实现了音乐模块的布局显示,但是留了个小尾巴,就是图片显示,这个模块中,图片不是方正的,而是有透视的,但是呢,Qt的图像显示显示,我还没有研究那么深入,所以目前只能是像,但是肯定不是真真的透视。我是利用遮罩来实现的,其实还是平面的图片,仅仅是用了一个透视的图片模版来覆盖一下。
HMI-31-【运动模式】解决音乐模块图片显示问题
HMI-29-【运动模式】转速表实现及中心油耗仪表实现
今天我要搞得就是中心的这个表,指针的是转速表 中心显示的油耗表。
HMI-29-【运动模式】转速表实现及中心油耗仪表实现
|
传感器 人工智能 监控
空鼠语音按键三合一交互,这样玩电视更方便
对于智能电视来说,交互方式一直是厂商们在努力研发的方向。传统的遥控器按键对于智能电视是种非常麻烦的交互方式,如何更好地提升操控体验,是各个厂商比拼技术实力的关键点。
392 0
空鼠语音按键三合一交互,这样玩电视更方便