阅读(1886) 赞(2)

百度智能小程序 开始监听设备方向变化

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);
    }
});