百度智能小程序 監(jiān)聽加速度數(shù)據(jù)

2020-09-05 14:29 更新

swan.onAccelerometerChange

解釋:監(jiān)聽加速度數(shù)據(jù),頻率依賴 swan.startAccelerometer 傳遞的 interval,默認(rèn) 5 次/秒。接口調(diào)用后會(huì)自動(dòng)開始監(jiān)聽,可使用 swan.stopAccelerometer 停止監(jiān)聽。

Web 態(tài)說明:由于瀏覽器對(duì)于 W3C 規(guī)范的實(shí)現(xiàn)差異,onAccelerometerChange 功能在部分瀏覽器(比如 Safari 瀏覽器)下不可用,在功能不可用的情況下,該方法的事件回調(diào)不會(huì)被觸發(fā),但該方法會(huì)返回一個(gè)錯(cuò)誤對(duì)象。

方法參數(shù)

Function callback

callback 參數(shù)說明

屬性名類型必填默認(rèn)值說明

x

Number

X 軸

y

Number

Y 軸

z

Number

Z 軸

示例 

在開發(fā)者工具中打開


圖片示例

代碼示例

<view class="wrap">
    <view class="page-top">
        <view class="page-top-text">{{title}}</view>
        <view class="page-top-line"></view>
    </view>
    <view class="page-body-canvas">
        <image mode="aspectFit" src="https://b.bdstatic.com/searchbox/icms/searchbox/img/gravity.png" rel="external nofollow"  class="page-body-ball"></image>
        <canvas class="page-body-ball" show="{{true}}" canvas-id="small-ball"></canvas>
    </view>
    <view class="page-body-xyz">
        <text class="page-body-title">X: {{x}}</text>
        <text class="page-body-title">Y: {{y}}</text>
        <text class="page-body-title">Z: {{z}}</text>
    </view>
    <view class="page-body-btn">
        <view class="middle-btn {{!isWatch ? '' : 'disabled'}}" bind:tap="startWatch">開始監(jiān)聽</view>
        <view class="middle-btn {{!isWatch ? 'disabled' : ''}}" bind:tap="stopWatch">停止監(jiān)聽</view >
    </view>
</view>
Page({
    data: {
        title: '傾斜手機(jī)即可移動(dòng)下方小球',
        isWatch: true,
        x: 0,
        y: 0,
        z: 0
    },

    onReady() {
        this.position = {
            x: 151,
            y: 151,
            vx: 0,
            vy: 0,
            ax: 0,
            ay: 0
        };
        swan.onAccelerometerChange(res => {
            this.setData({
                x: res.x.toFixed(2),
                y: res.y.toFixed(2),
                z: res.z.toFixed(2)
            });
            this.position.ax = Math.sin(res.x * Math.PI / 2);
            this.position.ay = -Math.sin(res.y * Math.PI / 2);
        });
        this.interval = setInterval(() => {
            this.drawSmallBall();
        }, 20);
    },
    onShow() {
        let isWatch = this.data.isWatch;
        isWatch 
        ? swan.startAccelerometer()
        : swan.stopAccelerometer();
    },
    drawSmallBall() {
        let p = this.position;
        p.x = p.x + p.vx;
        p.y = p.y + p.vy;
        p.vx = p.vx + p.ax;
        p.vy = p.vy + p.ay;

        if (Math.sqrt(Math.pow(Math.abs(p.x) - 151, 2) + Math.pow(Math.abs(p.y) - 151, 2)) >= 115) {
            if (p.x > 151 && p.vx > 0) {
                p.vx = 0;
            }
            if (p.x < 151 && p.vx < 0) {
                p.vx = 0;
            }
            if (p.y > 151 && p.vy > 0) {
                p.vy = 0;
            }
            if (p.y < 151 && p.vy < 0) {
                p.vy = 0;
            }
        }
        let stx = this.createCanvasContext('small-ball');
        stx.beginPath(0);
        stx.arc(p.x, p.y, 15, 0, Math.PI * 2);
        stx.setFillStyle('#3388FF');
        stx.fill();
        stx.draw();
    },
    startWatch() {
        this.setData('isWatch', true);
        swan.startAccelerometer();
    },
    stopWatch() {
        this.setData('isWatch', false);
        swan.stopAccelerometer();
    },
    onHide() {
        clearInterval(this.interval);
        app.globalData.openParams = '';
    },
    onUnload() {
        clearInterval(this.interval);
    }
});

錯(cuò)誤碼

Android

錯(cuò)誤碼說明

1001

執(zhí)行失敗

iOS

錯(cuò)誤碼說明

202

解析失敗,請(qǐng)檢查參數(shù)是否正確

1001

設(shè)備不支持否正確



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)