提交 ec066665 编写于 作者: fxy060608's avatar fxy060608

refactor accelerometer

上级 e0039c51
......@@ -159,6 +159,15 @@ function createApiCallback (apiName, params = {}, extras = {}) {
const invokeCallback = function (res) {
res.errMsg = res.errMsg || apiName + ':ok'
// 部分 api 可能返回的 errMsg 的 api 名称部分不一致,格式化为正确的
if (res.errMsg.indexOf(':ok') !== -1) {
res.errMsg = apiName + ':ok'
} else if (res.errMsg.indexOf(':cancel') !== -1) {
res.errMsg = apiName + ':cancel'
} else if (res.errMsg.indexOf(':fail') !== -1) {
res.errMsg = apiName + ':fail'
}
const errMsg = res.errMsg
if (errMsg.indexOf(apiName + ':ok') === 0) {
......
......@@ -187,9 +187,9 @@ const third = [
'unsubscribePush',
'onPush',
'offPush',
'requireNativePlugin',
'requireNativePlugin',
'upx2px'
]
]
const apis = [
...base,
......@@ -201,10 +201,10 @@ const apis = [
...device,
...keyboard,
...ui,
...event,
...file,
...event,
...file,
...canvas,
...third
]
export default apis
module.exports = apis
export const upx2px = [{
name: 'upx',
type: Number,
type: [Number, String],
required: true
}]
import {
invoke
} from 'uni-core/service/bridge'
import {
onMethod,
invokeMethod
} from '../../platform'
const callbacks = []
onMethod('onAccelerometerChange', function (res) {
callbacks.forEach(callbackId => {
invoke(callbackId, res)
})
})
let isEnable = false
/**
* 监听加速度
* @param {*} callbackId
*/
export function onAccelerometerChange (callbackId) {
// TODO 当没有 start 时,添加 on 需要主动 start?
callbacks.push(callbackId)
if (!isEnable) {
startAccelerometer()
}
}
export function startAccelerometer ({
interval // TODO
} = {}) {
if (isEnable) {
return
}
isEnable = true
return invokeMethod('enableAccelerometer', {
enable: true
})
}
export function stopAccelerometer () {
isEnable = false
return invokeMethod('enableAccelerometer', {
enable: false
})
}
......@@ -4,4 +4,4 @@ export function unpack (args) {
export function invoke (...args) {
return UniServiceJSBridge.invokeCallbackHandler(...args)
}
}
const callbacks = []
var listener
/**
* 监听加速度
* @param {*} callbackId
*/
export function onAccelerometerChange (callbackId) {
callbacks.push(callbackId)
if (!listener) {
startAccelerometer()
}
}
/**
* 开始监听加速度数据
*/
export function startAccelerometer () {
const {
invokeCallbackHandler: invoke
} = UniServiceJSBridge
if (window.DeviceMotionEvent) {
listener = function (event) {
callbacks.forEach(callbackId => {
const acceleration = event.acceleration || event.accelerationIncludingGravity
invoke(callbackId, {
x: acceleration.x || 0,
y: acceleration.y || 0,
z: acceleration.z || 0,
errMsg: 'onAccelerometerChange:ok'
})
})
}
window.addEventListener('devicemotion', listener, false)
return {}
} else {
throw new Error('device nonsupport devicemotion')
}
}
/**
* 停止监听加速度数据
*/
export function stopAccelerometer () {
if (listener) {
window.removeEventListener('devicemotion', listener, false)
listener = null
}
return {}
import {
publish
} from '../../bridge'
let listener
export function enableAccelerometer ({
enable
}) {
return enable ? startAccelerometer() : stopAccelerometer()
}
/**
* 开始监听加速度数据
*/
function startAccelerometer () {
if (window.DeviceMotionEvent) {
listener = function (event) {
const acceleration = event.acceleration || event.accelerationIncludingGravity
publish('onAccelerometerChange', {
x: acceleration.x || 0,
y: acceleration.y || 0,
z: acceleration.z || 0,
errMsg: 'onAccelerometerChange:ok'
})
}
window.addEventListener('devicemotion', listener, false)
return {}
} else {
throw new Error('device nonsupport devicemotion')
}
}
/**
* 停止监听加速度数据
*/
function stopAccelerometer () {
if (listener) {
window.removeEventListener('devicemotion', listener, false)
listener = null
}
return {}
}
/**
* 触发 service 层,与 onMethod 对应
*/
export function publish (name, res) {
return UniServiceJSBridge.emit('api.' + name, res)
}
export function publishHandler (event, args, pageId) {
// h5 平台直接调用UniViewJSBridge
global.UniViewJSBridge.subscribeHandler(event, args, pageId)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册