更新记录
1.0.0(2025-07-08) 下载此版本
H5 陀螺仪插件 - 为 uni-app 提供 H5 平台的陀螺仪功能支持
平台兼容性
uni-app
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
- | √ | √ | √ | √ | × | - | - | - |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | - | × | × | × | × |
其他
多语言 | 暗黑模式 | 宽屏模式 |
---|---|---|
× | × | √ |
jz-h5-gyroscope
H5 陀螺仪插件 - 为 uni-app 提供 H5 平台的陀螺仪功能支持
📋 插件简介
uni-app 官方的陀螺仪 API 在 H5 平台不支持,本插件通过浏览器的 DeviceOrientationEvent
API 实现了与官方 API 相同的接口,让您可以在 H5 环境中使用陀螺仪功能。
平台差异对比
平台 | uni-app 官方 | 本插件支持 |
---|---|---|
App | ❌ | ❌ |
H5 | ❌ | ✅ |
微信小程序 | ✅ | ❌ |
支付宝小程序 | ✅ | ❌ |
百度小程序 | ❌ | ❌ |
抖音小程序 | ❌ | ❌ |
元服务 | ✅ | ❌ |
🚀 快速开始
1. 安装使用
// 导入插件
import jzH5Gyroscope from '@/uni_modules/jz-h5-gyroscope/index.js'
2. 基本使用
export default {
data() {
return {
gyroscopeData: { x: 0, y: 0, z: 0 }
}
},
onLoad() {
// 监听陀螺仪数据变化
jzH5Gyroscope.onGyroscopeChange((data) => {
this.gyroscopeData = data;
console.log('陀螺仪数据:', data);
});
},
methods: {
startGyroscope() {
jzH5Gyroscope.startGyroscope({
interval: 200,
success: (res) => {
console.log('开始监听成功', res);
},
fail: (error) => {
console.error('开始监听失败', error);
}
});
},
stopGyroscope() {
jzH5Gyroscope.stopGyroscope({
success: (res) => {
console.log('停止监听成功', res);
}
});
}
},
onUnload() {
// 清理资源
jzH5Gyroscope.stopGyroscope();
jzH5Gyroscope.offGyroscopeChange();
}
}
📖 API 文档
jzH5Gyroscope.startGyroscope(options)
开始监听陀螺仪数据。
参数说明
参数 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
interval | Number | 200 | 否 | 监听频率,单位毫秒 |
success | Function | - | 否 | 接口调用成功的回调函数 |
fail | Function | - | 否 | 接口调用失败的回调函数 |
complete | Function | - | 否 | 接口调用结束的回调函数 |
interval 参数对应关系
根据 uni-app 官方文档,微信小程序支持的 interval 参数:
"game"
:20ms/次(对应本插件:20)"ui"
:60ms/次(对应本插件:60)"normal"
:200ms/次(对应本插件:200)
示例
jzH5Gyroscope.startGyroscope({
interval: 200,
success(res) {
console.log('开始监听陀螺仪成功', res);
},
fail(error) {
console.log('开始监听陀螺仪失败', error);
}
});
jzH5Gyroscope.stopGyroscope(options)
停止监听陀螺仪数据。
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 接口调用成功的回调函数 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数 |
示例
jzH5Gyroscope.stopGyroscope({
success(res) {
console.log('停止监听陀螺仪成功', res);
}
});
jzH5Gyroscope.onGyroscopeChange(callback)
监听陀螺仪数据变化事件。
callback 参数说明
属性 | 类型 | 说明 |
---|---|---|
res | Object | 陀螺仪数据对象 |
res 的结构
名称 | 类型 | 描述 |
---|---|---|
x | Number | X轴方向角度(俯仰角),范围 [-180, 180] |
y | Number | Y轴方向角度(横滚角),范围 [-90, 90] |
z | Number | Z轴方向角度(偏航角),范围 [0, 360) |
示例
jzH5Gyroscope.onGyroscopeChange((data) => {
console.log('X轴(俯仰):', data.x);
console.log('Y轴(横滚):', data.y);
console.log('Z轴(偏航):', data.z);
});
jzH5Gyroscope.offGyroscopeChange(callback)
取消监听陀螺仪数据变化事件。
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callback | Function | 否 | 要取消的回调函数,不传则取消所有回调 |
示例
// 取消指定回调
jzH5Gyroscope.offGyroscopeChange(myCallback);
// 取消所有回调
jzH5Gyroscope.offGyroscopeChange();
jzH5Gyroscope.getGyroscopeStatus()
获取当前陀螺仪状态(扩展方法)。
返回值
属性 | 类型 | 说明 |
---|---|---|
isListening | Boolean | 是否正在监听 |
interval | Number | 当前监听间隔 |
lastData | Object | 最后一次数据 |
callbackCount | Number | 回调函数数量 |
示例
const status = jzH5Gyroscope.getGyroscopeStatus();
console.log('监听状态:', status.isListening);
console.log('监听间隔:', status.interval);
console.log('最后数据:', status.lastData);
🎯 数据说明
坐标系说明
- X轴(俯仰角 Beta): 设备绕 X 轴旋转的角度,当设备向前倾斜时为正值
- Y轴(横滚角 Gamma): 设备绕 Y 轴旋转的角度,当设备向左倾斜时为正值
- Z轴(偏航角 Alpha): 设备绕 Z 轴旋转的角度,表示设备水平面的方向
数据范围
- X轴: -180° ~ 180°
- Y轴: -90° ~ 90°
- Z轴: 0° ~ 360°
⚠️ 注意事项
1. 环境要求
- HTTPS: 现代浏览器要求在 HTTPS 环境下才能访问设备传感器
- 设备支持: 设备必须具有陀螺仪传感器
- 浏览器支持: 支持
DeviceOrientationEvent
的现代浏览器
2. 权限处理
- iOS 13+: 需要用户主动授权访问陀螺仪
- Android: 通常无需额外权限
- 桌面浏览器: 部分浏览器可能不支持
3. 最佳实践
// 1. 在页面 onLoad 中设置监听
onLoad() {
this.setupGyroscopeListener();
},
// 2. 在页面 onUnload 中清理资源
onUnload() {
jzH5Gyroscope.stopGyroscope();
jzH5Gyroscope.offGyroscopeChange();
},
// 3. 错误处理
startGyroscope() {
jzH5Gyroscope.startGyroscope({
interval: 200,
success: (res) => {
console.log('成功启动陀螺仪');
},
fail: (error) => {
if (error.errMsg.includes('权限')) {
uni.showModal({
title: '权限提示',
content: '请在设置中允许访问陀螺仪',
showCancel: false
});
} else {
uni.showToast({
title: '陀螺仪不可用',
icon: 'none'
});
}
}
});
}
🔧 兼容性测试
推荐测试设备
- iOS: iPhone 6s+ / iPad Pro+
- Android: 支持陀螺仪的 Android 5.0+ 设备
- 浏览器: Chrome 50+、Safari 10+、Firefox 40+
测试方法
- 在 HTTPS 环境下访问页面
- 点击开始监听按钮
- 旋转设备观察数据变化
- 验证数据范围和精度
🆚 与官方 API 的差异
特性 | 官方 API | 本插件 |
---|---|---|
H5 支持 | ❌ | ✅ |
权限处理 | 自动 | 手动请求 |
数据格式 | {x,y,z} | {x,y,z} |
回调方式 | 相同 | 相同 |
错误处理 | 相同 | 相同 |
📝 更新日志
v1.0.0
- 初始版本发布
- 实现基本的陀螺仪监听功能
- 支持 iOS 权限请求
- 完整的错误处理机制
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License
注意: 本插件仅在 H5 平台有效,其他平台请使用 uni-app 官方 API。