阅读(1897)
赞(8)
百度智能小程序 开始监听设备方向变化
2020-08-13 16:22:01 更新
swan.startDeviceMotionListening
基础库 3.30.2 开始支持,低版本需做兼容处理。
解释:开始监听设备方向的变化。Web 态说明:由于浏览器对于 W3C 规范的实现差异,startDeviceMotionListening 功能在部分浏览器(比如 Safari 浏览器)下不可用,在功能不可用的情况下会执行开发者设置的 fail 回调
方法参数
Object object
object 参数说明
属性名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
interval | String | 否 | normal | 监听设备方向的变化回调函数的执行频率 |
success | Function | 否 | 接口调用成功的回调函数 | |
fail | Function | 否 | 接口调用失败的回调函数 | |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
interval 的有效值
根据机型性能、当前 CPU 与内存的占用情况,interval 的设置与实际 swan.onAccelerometerChange() 回调函数的执行频率会有一些出入。
值 | 说明 |
---|---|
game | 适用于更新游戏的回调频率,在 20ms/次 左右 |
ui | 适用于更新 UI 的回调频率,在 60ms/次 左右 |
normal | 普通的回调频率,在 200ms/次 左右 |
示例
图片示例
代码示例
<view class="wrap">
<view class="card-area">
<view class="list-area border-bottom" s-for="item in infoList">
<text class="list-item-key-4">{{item.chineseName}}</text>
<text class="list-item-value">{{item.value}}</text>
</view>
<view class="button-group">
<button bind:tap="stopDeviceMotionListening" disabled="{{!disabled}}" type="primary" hover-stop-propagation="true">停止监听</button>
<button bind:tap="startDeviceMotionListening" disabled="{{disabled}}" type="primary" hover-stop-propagation="true">开始监听</button>
</view>
</view>
</view>
Page({
data: {
infoList: [{
engName: 'alpha',
chineseName: 'z轴角度',
value: ''
}, {
engName: 'beta',
chineseName: 'x轴角度',
value: ''
}, {
engName: 'gamma',
chineseName: 'y轴角度',
value: ''
}],
disabled: false
},
startDeviceMotionListening() {
swan.startDeviceMotionListening({
interval: 'ui',
success: () => {
this.setData('disabled', !this.data.disabled);
console.log('startDeviceMotionListening success');
this.onDeviceMotionChange();
},
fail: err => {
console.log('startDeviceMotionListening fail', err);
}
});
},
onDeviceMotionChange() {
swan.onDeviceMotionChange(res => {
console.log('onDeviceMotionChange', res);
this.updateInfoList(res);
});
},
stopDeviceMotionListening() {
swan.stopDeviceMotionListening({
success: () => {
this.setData('disabled', !this.data.disabled);
console.log('stopDeviceMotionListening success');
},
fail: err => {
console.log('stopDeviceMotionListening fail', err);
}
});
},
updateInfoList(res) {
let infoList = this.data.infoList;
for (let item of infoList) {
if (!res[item.engName]) {
item.value = '暂无';
} else {
item.value = res[item.engName].toFixed(2);
}
}
this.setData('infoList', infoList);
}
});